
课程咨询: 400-996-5531
投诉建议: 400-111-8989
认真做教育 专心促就业
分层架构开发是目前大多数软件开发程序员都会用到的一种编程开发技术,而本文我们就通过案例分析来简单了解一下,应用分层架构类型与用法分享。
三层架构VS四层架构
我们公司原来的分层采用的是传统的三层架构,比如在构建项目的时候,我们通常会建立三个目录:Web、Service和Dao,它们分别对应了表现层、逻辑层还有数据访问层。
这样导致一个很大的问题,随着业务越来越复杂,逻辑层也就是service层越来越庞大,所以出现了前面说的5000多行的类,可想而知维护成本有多大。
终端显示层:各端模板渲染并执行显示的层。当前主要是Velocity渲染,JS渲染,JSP渲染,移动端展示等。
开放接口层:将Service层方法封装成开放接口,同时进行网关安全控制和流量控制等。
Web层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
Service层:业务逻辑层。
Manager层:通用业务处理层。主要实现下面的功能,1)对三方平台封装的层,预处理返回结果及转化异常信息,适配上层接口。2)对Service层通用能力的下沉,如缓存方案、中间件通用处理。3)与DAO层交互,对多个DAO的组合复用。
DAO层:数据访问层,与底层MySQL、Oracle、Hbase等进行数据交互。
外部接口或三方平台:包括其它部门RPC开放接口,基础平台,其它公司的HTTP接口。
在这个分层架构中主要增加了Manager层,它可以将Service层中的一些通用能力比如操作缓存、消息队列的操作下沉,也可以将通过feign调用其他服务的接口进行一层包装,再提供给Service调用,这也就是所谓的防腐层。
VO、DTO、BO、DO区别
前面讲解了整体的一个分层架构,那么在不同的层级之间必然需要一些模型对象进行流转传递,VO,BO,DO,DTO,那么他们之间有什么区别呢?
VO(ViewObject):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
DTO(DataTransferObject):数据传输对象,用于展示层与服务层之间的数据传输对象。
BO(BusinessObject):业务对象,把业务逻辑封装为一个对象,这个对象可以包括一个或多个其它的对象。
DO(DomainObject):领域对象,阿里巴巴规范中引入,此对象与数据库表结构一一对应,通过DAO层向上传输数据源对象。
VO和DTO什么区别?
VO比较容易混淆的是DTO,DTO是展示层与服务层之间传递数据的对象,可以这样说,对于绝大部分的应用场景来说,DTO和VO的属性值基本是一致的,而且他们通常都是POJO,那么既然有了VO,为什么还需要DTO呢?
BO和DTO的区别?
从用途上进行根本的区别,BO是业务对象,DTO是数据传输对象,虽然BO也可以排列组合数据,但它的功能是对内的,但在提供对外接口时,BO对象中的某些属性对象可能用不到或者不方便对外暴露,那么此时DTO只需要在BO的基础上,抽取自己需要的数据,然后对外提供。在这个关系上,通常不会有数据内容的变化,内容变化要么在BO内部业务计算的时候完成,要么在解释VO的时候完成。
我们项目根据实际情况总结了分层领域模型的规范:
前端传入的参数统一使用DTO接收
由于公司是TOB项目,只有一个电脑web端,所以返回给展示层或者Feign返回的对象建议直接用DTO返回,特殊情况采用VO返回
由于历史原因,和数据库模型对应的不采用DO结尾,直接用原始对象,比如学生表student直接使用Student对象
目前很多代码存在继承关系,比如DTO、VO继承数据库对象,这个坚决不允许
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音达内三江区域学习了解。