版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

一个控制层可以依赖多个应用
一个应用层只有一个仓库和多个服务
仓库由一个或多个DAO组成
每一层的方法都需要描述输入输出信息

控制层

...

输入输出
控制层应该输入DTO输出DTO

与应用的关系
一个控制可以依赖多个应用

输入校验
不在dto上使用注释控制输入数据限制, 而是在值对象的构造方法中判断

应用层

总体代码
应用层只包含流程代码, 不应出现业务代码(具体逻辑,控制语句,循环语句)
具体的业务代码由服务层和实体完成
应用层应该明确职责, 如用户的增删查改与用户行为应该独立分为两个应用

注释
在方法的注释中描述输入和输出的数据, 接口的功能

输入输出
应用层接受命令类型输入,如:command,query,event, 输出DTO类型

与仓库的关系
一个应用使用一个仓库

...


...

与仓库的关系
服务不允许依赖仓库, 通过方法传参的形式传入仓库调用仓库方法

与其他服务的关系
允许服务层之间相互依赖,

仓库层

...

注释
在方法的注释中应该描述输入和输出的数据, 接口的功能

与DAO的关系
依赖一个或多个DAO, 只依赖应用或服务需要用到的DAO
包括redis,mogodb等

DAO层

...

注释
在方法的注释中应该描述输入和输出的数据, 接口的功能

目录结构



root
|
|____controler 控制层
|
|____types 类型
|    |
|    |____dto 请求或响应数据对象
|    |
|    |____cmd 命令出查询外的请求
|    |
|    |____query 查询请求
|    |
|    |____event 事件
|
|____exception 异常
|    |
|    |____handle 异常处理
|
|____application 应用层
|    |
|    |____assembler 转换层
|
|____domain 领域层
|    |
|    |____entity 实体
|    |
|    |____vo 值对象
|
|____facade 装饰层
|
|____service 服务层
|
|____repository 仓库层
     |
     |____convert 转换层
     |
     |____mapper/dao 接口层
     |
     |____do 数据对象


控制层


总体代码
控制层只存在将请求参数转换成命令和调用应用方法的代码, 如图
Image Added


注释
在方法的注释中应该描述输入和输出的数据, 接口的功能

输入输出
控制层应该输入DTO输出DTO

与应用的关系
一个控制可以依赖多个应用

输入校验
不在dto上使用注释控制输入数据限制, 而是在值对象的构造方法中判断

创建新的DTO时不需要考虑给字段增加哪些校验注解

应用层

总体代码
应用层只包含流程代码, 不应出现业务代码(具体逻辑,控制语句,循环语句)
具体的业务代码由服务层和实体完成
应用层应该明确职责, 如用户的增删查改与用户行为应该独立分为两个应用

注释
在方法的注释中描述输入和输出的数据, 接口的功能

输入输出
应用层接受命令类型输入,如:command,query,event, 输出DTO类型

与仓库的关系
一个应用使用一个仓库


服务层


总体代码
具体的业务逻辑,单个服务的功能应该要单一,如新增用户时对用户名的唯一校验需要一个服务, 可以使前后台共用一个服务校验

与仓库的关系
服务不允许依赖仓库, 通过方法传参的形式传入仓库调用仓库方法

与其他服务的关系
允许服务层之间相互依赖,

仓库层



总体代码
不应出现业务逻辑

注释
在方法的注释中应该描述输入和输出的数据, 接口的功能

与DAO的关系
依赖一个或多个DAO, 只依赖应用或服务需要用到的DAO
包括redis,mogodb等

DAO层



总体代码
原来的mapper层前后台所使用的sql应该独立避免,逻辑混乱

注释
在方法的注释中应该描述输入和输出的数据, 接口的功能


实体与仓库的创建



实体



区分实体与值对象的关键在于是否有状态
实体必须包含主键

...