项目架构实战:分层架构规范的Demo以及微服务架构的演进

请先参考

项目架构规范:阿里规约,MVC架构以及三层架构(一)

https://blog.csdn.net/lin451791119/article/details/106348414

项目架构规范:阿里规约,MVC架构以及三层架构(二)

https://blog.csdn.net/lin451791119/article/details/106378277

项目架构规范:阿里规约,MVC架构以及三层架构(三)

https://blog.csdn.net/lin451791119/article/details/106396958

分层目录要点

  1. 严格区分每层的职责
  2. 严格确定分层的调用链路
  3. 严禁使用map/json等格式做数据传递
  4. 严禁使用BeanUtil.Copy等方法转换

分层目录结构

总体分为应用层、业务领域层和基础设施层

 

应用层

应用层用于接收外部的请求,是整个系统所提供能力的外观,包含API、MQ-Listener等。专用于处理和业务无关的操作,包含验签、参数校验、拦截等处理,不实现业务逻辑通过编排业务领域和外部请求,对外提供细粒度的能力

  • API:接收来自外部的HTTP请求,只做参数校验、业务领域数据组装、业务逻辑编排和响应请求
  • MQ:监听消息队列的请求,不做业务处理
  • Model:用于封装外部的请求参数、封装响应外部参数,与底层数据存储的结构完全无关
  • Assembler:用于Model与业务领域层的Model之间的相互转换工作,例如:使用反射机制自动beanutils相互转换
  • Configuration:全局的配置信息或处理,例如:全局参数校验机制、全局异常处理等

业务领域层

业务领域层主要用于实现业务逻辑,包含业务规则、策略和流程

  • Model:用于接收或响应来自应用层的业务属性,同时可承载Model的行为避免失血模型。业务层只负责业务,与具体的表现形式无关,所以它返回的Model不应该出现与表现形式的耦合。
  • Repository:仓储层用于对持久化通用操作的封装,将领域对象持久化,屏蔽了持久化层的特性
  • Service:处理业务逻辑,对Repository和External的操作编排
  • External:封装对外部的请求,包含了请求的定义、参数等

基础设施层

基础设施层为以上各层提供技术支持,例如持久化操作、公用的操作等

  • Commons:共用的操作类、工具类等
  • Persistence:直接面向DB的操作

命名规范

名称 描述 所属分层 示例 备注
Client Request 客户端请求入参对象 Facade.model UserRequest  
Client Response 客户端请求响应对象 Facade.model UserResponse  
Domain Object 领域对象 Biz.domain UserDomain  
Value Object 值对象 Biz.domain UserVO  
Domain Factory 领域工厂 Biz.domain UserFactory 创建Domain Object
Repository 仓库 Biz.domain UserRepository 对Domain Object的持久化
Service 业务逻辑 Biz.service UserService 处理业务逻辑
External Request 请求外部对象 Biz.external.model UserExtRequest 请求外部接口的入参
External Response 请求外部对象 Biz.external.model UserExtResponse 接收外部接口的响应
Data Object 数据库对象 Infrastructure.persistence.entity User  
Dao Object 数据库操作对象 Infrastructure.persistence.mapper UserMapper  

为什么要分出这个external这个包,是为了以后向微服务架构转型,尤其是Spring+Feign,会带来极大的便利!如果请求远程的服务和服务器提供的服务混杂在一起,整理项目的时候会十分混乱!

分层调用路径

 

目标 所属层操作 备注
Client Request Domain Object Domain.factory  
Domain Object Data Object Domain.Repository 意味着Domain Object可以出现在Factory、Service和Repository层
Domain Object Client Response Facade.api 拿到业务层的返回的Domain Object后,转换成客户端能识别的Client Response
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章