对代码进行分层,每一层内部高内聚,低耦合可以有效提高代码的可维护性。

MVC

MVC分层是最经典的分层模型,即Model-View-Control。View为展示层,一般为前端负责,包含HTML,CSS和JS,主要负责对用户的展示和交互。广义上的View层还包含Android,IOS,PC,IOT等终端。Model层则为数据模型,和相关的增删改查。随着存储产品的增多,数据能力不断拓展(MySQL、Oracle、Redis、MongoDB、ElasticSearch、PostgreSQL、HBase 等)。Controller 层则包含了具体业务逻辑的实现

四层结构

四层结构主要是将 Controller 层一分为二,分为了 Web 层和 Service 层。Web 层只做参数校验,转发和各个端的模板渲染并执行显示。各个原子化的业务API下沉到Service层,比如下单这样一个接口,除了生成一条订单记录,还会调用物流,支付等API,聚合和业务逻辑在Service层完成,web层只管调用下单的API而不管里面具体的实现。
Service层中可能还会有一些比较通用的功能可以下沉到Manager中,比如缓存的方案。而数据持久层也会有些外部的数据源,可以放到Proxy当中。

image.png
其中每一层的领域模型:
DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象
DTO(Data Transfer Object):远程调用对象,它是RPC服务提供的领域模型
BO(Business Object):它是业务层封装业务逻辑的对象,一般是多个数据源的聚合
VO(View Object):请求处理层传输的数据对象,在Spring默认的转换之后,通常会给前端返回一个JSON

阿里巴巴Java开发手册推荐的分层模型:

image.png

参考文章:
Java架构-代码分层的设计之道:https://juejin.im/post/5bfe38556fb9a049f153e7a1
Java Web应用的代码分层最佳实践。:https://www.hollischuang.com/archives/2384
《架构方法论》分层架构:http://ifeve.com/am-hierarchy/
优秀的代码都是如何分层的?:https://yq.aliyun.com/articles/617713
代码分层:https://www.jianshu.com/p/44b30120beda
我项目中的代码都是如何分层的?:https://aijishu.com/a/1060000000016097
阿里巴巴Java开发手册:https://github.com/alibaba/p3c/blob/master/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4Java%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C%EF%BC%88%E5%8D%8E%E5%B1%B1%E7%89%88%EF%BC%89.pdf