知识卡片

PO/DO/DTO/VO四种数据对象的逐层转换与性能代价

普通读书笔记卡

内容

微服务从基础层到前端一共流转着四种数据对象:持久化对象(PO)与数据库结构一一映射,是数据持久化的载体;领域对象(DO)是微服务运行时核心业务对象的载体,一般包括实体或值对象;数据传输对象(DTO)用于前端应用与应用层之间、或微服务与微服务之间的数据组装和传输;视图对象(VO)用于封装展示层某个具体页面或组件所需的数据。这四种对象沿着分层逐级转换:基础层完成PO与DO的相互转换(持久化时DO转PO,构建初始化时PO转DO);领域层和应用层主要操作DO对象,跨微服务调用前DO会被转换成DTO;用户接口层完成DO和DTO的互转,向前端提供DTO、从前端接收DTO再还原成DO;前端应用则主要面对VO,通过DTO和后端交互。书中特别提醒:这一整套数据转换机制的目的是实现各层解耦、保证领域模型的稳定、让微服务具备更强的扩展和适配能力,但每一次数据转换本质上都是有性能代价的——多一层转换就多一份对象创建、属性拷贝的开销,所以在设计时需要在”解耦带来的扩展性”和”转换带来的性能损耗”之间找到平衡,而不是不假思索地在每一层都套上一层转换。

参考来源

- 位置:第17章《服务和数据在微服务各层的协作》"17.2 数据视图"(源文件:_epub-src/OEBPS/Text/chapter4-6-2.xhtml) - 结论依据:原文说明"数据持久化对象(Persistent Object,PO)……领域对象(Domain Object,DO)……数据传输对象(Data Transfer Object,DTO)……视图对象(View Object,VO)……数据转换的主要目的是实现各层解耦,以保证领域模型的稳定,也是为了让微服务具有更强的扩展能力和适配能力。但每一次数据转换都是以性能作为代价,在设计时需要在性能和扩展能力之间找到平衡",直接支撑本卡片结论。 - 原始内容:数据转换的主要目的是实现各层解耦,以保证领域模型的稳定,也是为了让微服务具有更强的扩展能力和适配能力。但每一次数据转换都是以性能作为代价,在设计时需要在性能和扩展能力之间找到平衡。