分层与对象命名规范
如上图所示,系统划分成3个层:Controller层,Service层,Domain层
Controller层:
Controller层是接入层,提供对外或者前端的接口,该层主要作用是提供对外接口的封装。基于CQRS分离模式,该层对象主要由Command,Query和Vo组成。其中:
Command:
Command代表命令接口,接口会改变系统的数据,一步需要考虑事务。
Query:
Query代表查询接口,接口只会查询数据,不会改变系统数据,例如各种前端的展示页面使用的接口。Vo是接口返回结果的对象化封装。
命名规范:
对象 | 规范 | 示例 |
---|---|---|
Command | 方法名+Command | AddUserCommand, UpdateUserCommand |
Query | 方法名+Query | ListUserQuery, PageListUserQuery,FindByNameUserQuery |
Vo | 方法名+Vo | ListUserVo, PageLIstUserVo, FindByNameUserVo |
Service层:
Service层是服务层,主要负责系统业务逻辑的部分。Service层对象不分出参和入参,统一命名为Dto。注意,Service层对象除了Dto还可以包含基础的封装对象例如:Integer, String等基础类型。
Domain层:
Service层是领域服务层,主要包含与数据库一一对应的Entity对象。
转换
层与层之间的对象不能跨层使用,必须进行对象拷贝转换。
总结如下表:
层次 | 入参对象 | 返回对象 |
---|---|---|
Controller层 | xxxCommand/xxxQuery | xxxVo |
Service层 | xxxDto /基础包装类 | xxxDto /基础包装类 |
Domain层 | xxxEntity | xxxEntity |
注意
Dto,Command,Query,Vo命名规范只对最外层的总包对象做命名规范要求。里层包裹的复用对象不做规范要求,建议复用对象都叫Pojo结尾即可。
分包规范
Command/Query/Vo
Command/Query/Vo 分别放在api或者controller包下的Command子包,Query子包和Vo子包。如下图所示:
Dto
Dto 放在Service包下的dto子包中,如下图所示
Entity
Entity放在domain.entity包下,如下图所示
对象继承规范
公共基础库基础对象继承关系
跨类型字段复用方案
Controller层与Service层对象复用字段的公共类放在common项目中,如下图所示
对象转换
对象转化统一使用base-common库中的ConvertUtil类进行转换。转换使用浅拷贝的方式避免带来性能损耗。
对象转对象
如下图示例
对象列表转对象列表
如下图示例
综合样本代码
综合使用可以参考模版工程中的User的增删改查例子