图1、2:基于Springmvc、RPC的三层架构角度
图3、4:基于struts2的三层架构角度
图5:基于mybatis三层构架角度
图6:基于servlet的三层构架角度
图7:信产业务
图8:其它
看着这图就比较复杂了,下面是我的简单看法,因为每个公司都有自己的规范或者要求,尽量多问问同事 :
- VO(View Object),视图对象。用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
- 前到后: 用户发出请求(可能是填写表单),比如前端表单的数据在展示层(XxxAction/XxxController)被匹配为XxxVO.java。
- 后到前:后端返回个前端的对象,可以 XxxVO.java
- DTO(Data Transfer Object),数据传输对象。这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。
- (XxxAction/XxxController)把VO转换为服务层(XxxServiceImpl.java)对应方法参数所要求的DTO,传送给服务层(如XxxServiceImpl.java)。
- BO(Business Object)业务对象。封装对象、复杂对象 ,里面可能包含多个类;
- 主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。
比如一个简历,有教育经历、工作经历、社会关系等等。
我们可以把教育经历对应一个PO,工作经历对应一个PO,社会关系对应一个PO。
建立一个对应简历的BO对象处理简历,每个BO包含这些PO。
这样处理业务逻辑时,我们就可以针对BO去处理。
- 主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。
- DO(Domain Object),领域对象。就是从现实世界中抽象出来的有形或无形的业务实体。
- 首先,服务层(XxxServiceImpl.java)根据方法参数DTO的数据构造(或重建)出一个DO;然后,调用DO的业务方法完成具体业务。
- PO(Persistent Object),持久化对象/数据。它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。
- mybatis生成的dao表实体对象,可以 XxxPO.java
参考:
开发中DTO,VO的解释 - 微笑点燃希望 - 博客园 (cnblogs.com)
架构设计(15):Java顶层工程结构规范和浅析VO、DTO、DO、PO - it610.com
面向服务体系架构的业务组件模型 - Java EE - 软件开发管理 - 深度开源 (open-open.com)
领域驱动模型VO、DTO、DO、PO 概念及其区别-51CTO.COM
POJO/PO/Bean/JavaBean/PO/DTO/VO/BO的区别和联系(文字最多)
bo dto java vo_PO、VO、BO,JavaWeb中的这几个“O”,你都了解吗 - it610.com
PO BO VO DTO POJO DAO DO 令人迷惑的Java概念 - liuyiyuan - 博客园 (cnblogs.com)