美文网首页
VO、DTO、DO、PO的概念、区别和用处

VO、DTO、DO、PO的概念、区别和用处

作者: 静心安分读书 | 来源:发表于2018-06-13 09:25 被阅读36次

    1、VO(View Object):视图对象,用于展示层,它的作用是把某个页面(或组件)所需要的数据封装起来。
    2、DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。
    3、DO(Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。 主要跟业务相关。
    4、PO(Persistent Object):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。
    5、VO与DTO的区别:DTO代表服务层需要接收的数据和返回的数据,而VO代表展示层需要显示的数据。
    6、DTO与DO的区别
    首先是概念上的区别,DTO是展示层和服务层之间的数据传输对象(可以认为是两者之间的协议),而DO是对现实世界各种业务角色的抽象,这就引出了两者在数据上的区别,例如UserInfo和User(对于DTO和DO的命名规则,请参见笔者前面的一篇博文),对于一个getUser方法来说,本质上它永远不应该返回用户的密码,因此UserInfo至少比User少一个password的数据。而在领域驱动设计中,正如第一篇系列文章所说,DO不是简单的POJO,它具有领域业务逻辑。 (DO是最全的数据,DTO是部分数据,有些数据不应该返回到前台)
    DO具有一些不应该让展示层知道的数据,DO具有业务方法,如果直接把DO传递给展示层,展示层的代码就可以绕过服务层直接调用它不应该访问的操作,对于基于AOP拦截服务层来进行访问控制的机制来说,这问题尤为突出,而在展示层调用DO的业务方法也会因为事务的问题,让事务难以控制。
    7、DO与PO的区别
    DO和PO在绝大部分情况下是一一对应的,PO是只含有get/set方法的POJO,但某些场景还是能反映出两者在概念上存在本质的区别
    参考:https://blog.csdn.net/zjrbiancheng/article/details/6253232

    相关文章

      网友评论

          本文标题:VO、DTO、DO、PO的概念、区别和用处

          本文链接:https://www.haomeiwen.com/subject/lqwdeftx.html