术语解释:
模块(Module):代码工程里面划分为多个小的、独立的子项目,子项目面向特定的功能场景,子项目之间可以相互关联。例如Maven工程(Project)可以被组织为多个模块(Module),此外每个模块都拥有自己的 pom.xml 文件
包(Package):包是一种组织类的方式,包的主要目的是防止命名冲突,并提供一种将相关的类、接口、枚举和注解等组织在一起的方式,从而简化代码的管理和使用。例如在Java中的Package
备注.本文也的相关代码示例都是基于Java的Maven工程
阿里服务分层规范
参考链接:
你的项目应该如何正确分层?
在阿里的编码规范中,其标准示例如下图:
图中分层介绍如下:
- 开放接口层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;进行网关安全控制、流量控制等。
- 终端显示层:各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染、JS 渲染、JSP 渲染、移动端展示等。
- Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
- Service 层:相对具体的业务逻辑服务层。
- Manager 层:通用业务处理层,它有如下特征:一是对第三方平台封装的层,预处理返回结果及转化异常信息;二是对Service层通用能力的下沉,如缓存方案、中间件通用处理;三是与DAO层交互,对多个DAO的组合复用。
- DAO 层:数据访问层,与底层 MySQL、Oracle、Hbase 进行数据交互。
可以看到有明显的分层和复用的意义,具体实践为:
- service层的上层,作为第一层,对外提供业务交互接口,要求:轻业务逻辑、参数校验、异常兜底。
- service层作为业务组装层,包含业务编排逻辑,一般是针对特定业务定制化编写,复用性较低。
- Mannager层是基础逻辑层,遵循高内聚低耦合思想,粒度较小,提供给上层复用。
对于上述分层架构,需要考虑的另一个因素,是层次之间一定是相邻层互相依赖,数据的流转也只能在相邻的两层之间流转:
在阿里巴巴编码规约中,列举了下面几个领域模型规约:
DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。
DTO(Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
BO(Business Object):业务对象,由Service层输出的封装业务逻辑的对象。
AO(Application Object):应用对象,在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
VO(View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。
Query:数据查询对象,各层接收上层的查询请求。注意超过2个参数的查询封装,禁止使用Map类来传输。
此外还有:POJO 等
以上领域模型仅供参考,体现在代码工程上就是包(Package)名的定义。在实际工作中,也许只会约定其中几项例如:VO、BO、POJO 。
综上,阿里服务分层规范,在实际编码中对应的是包(Package)的规范,因此其对应的工程结构如下:
todo
COLA 4.0
参考链接:
COLA 4.0:应用架构的最佳实践
todo
面向微服务的最佳实践
todo
标签:Service,对象,代码,Object,复用,业务,最佳,分层,面向 From: https://www.cnblogs.com/yu007/p/18034207