ddd,domain-driven design 领域驱动设计,最小单元是领域模型(domain model)。
ddd分层
- module:存放公共基础相关的包
- server:存放领域服务包,要求严格按领域划分原则切分服务,不可随便增加
- web:前端内容
server领域划分
内部结构分为四层
- interface 接口层:对外提供http请求接口,负责向用户显示信息和解释用户指令,与外部交互,eg. controller|bex。按业务板块分包
- application 应用层 :对interface提供跨领域组合的服务,用于组合、处理大块业务,协调和指挥领域对象来完成业务逻辑。应用层是很薄的一层,只有service,按业务板块分包,这些包包含独自的service类,这些service只体现业务的大体逻辑、流程。
- domain 领域层:对application层提供服务,是软件的核心所在,实现基础的|原子的业务逻辑,并且通过各种校验手段保证业务正确性,负责表达业务概念、业务状态以及业务规则。按业务板块分包,每个板块下又划分service、dao、dto包,即领域模型,每个板块都有独自的领域。domain的service体现的是基础的|原子的业务逻辑处理,dao体现的则是复杂的数据访问操作,一个dao中组合多个基础dao,一个方法中调用基础dao的多个方法,或者调用多个基础dao,期间常常对pojo对一些get、set的简单处理。
- infrastructure 基础层:为各层提供通用的、基础的支持,支持各层间的交互,相当于common模块,一般包含这些包:util、config,单表对应的entity|model、dao(基础dao),rpc。
interface、application层都可以包含check包——校验入参
通用的exception(系统层面的异常)定义放在infrastructure,只在某个业务板块使用的exception(业务层面的异常)可以放在application、domain层。
调用链从上到下。各层都可以直接调用 infrastructure 基础层。
实体类
- VO:与前端交互的实体
- DTO:层间交互实体,负责层间的数据传递
- Entity:对应数据表,用于持久层操作