版本比较

标识

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

暂未使用

代码


概述


修改代码架构, 使用Mapstruct和Lombok解决setter(),getter()以及查询结果到dto的转换
[Mapstruct文档](http://https://mapstruct.org/documentation/1.5/reference/html/#Preface "Mapstruct文档") [Lombok简单介绍](https://cloud.tencent.com/developer/article/1698734 "Lombok简单介绍")

...

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

注释

类注释上应该描述该应用提供的功能

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

Image Added

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

Image Added

与仓库的关系
一个应用使用一个仓库, 一个仓库可以依赖一个或多个DAO, cache等


服务层


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

需要提前结束时抛出对应的错误, 在配置全局异常处理

注释

类注释表明该类提供的服务范围,如图

Image Added

方法注释表明输入和输入, 简单介绍逻辑, 如图

Image Added

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

Image Added

调用方可以通过传入不同的仓库实现查询不同的数据, 而不是在该服务内部控制

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

仓库层



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

注意点

更新聚合时会导致全量更新, 以后可以通过快照实现

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

...


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


主键接口import java.io.Serializable;public interface Id extends Serializable {
    long serialVersionUID = 1L;
}
实体接口public interface Entity<id extends Id>{    id getId();
}

仓库

Image Added



实体接口

Image Added



聚合接口

Image Added

仓库



仓库接口

Image Added仓库接口
// 其中的实体表示仓库属于哪个领域, 仓库能查询的字段应该被包含在实体内
public interface Repo<entity extends Entity<id>, id extends Id> {
    // 常用方法
    entity findById(id id);    entity save(entity entity);
}

SQL



所有列表SQL都需要倒序