大家好,我在过去的 2-3 个月里一直在做我的一个项目,在随机的一天,我滚动了我的 IntelliJ(当我遇到问题时唯一给我最好建议的朋友),我注意到我的控制器有 300 行代码,而且只有 5 个 API !!
r
在 Springboot App 中,我们有下面的代码逻辑层和下面的描述,告诉在哪里写哪些代码。
控制器
该层几乎不包含业务逻辑,只消费外部请求,将DTO转换为Service-specific Object,调用服务,得到服务层的响应后,再转换回Response DTO返回给服务层外面的世界。
由于该层不是事务层,因此 Controller只能在不更新 DB 状态的情况下调用多个服务。如果有不同的服务只从 DB 获取数据,那么控制器可以执行多个服务调用。
服务
每个业务逻辑都将归入这一部分。通常,这一层是事务性的(@Transactional),因此如果在执行特定行后出现问题,我们可以进行回滚。
所以你可能会问,如果我们要在这里编写每个逻辑,为什么我们有一个控制器?
因为如果我们想支持多个消费者,其中一个是REST客户端,另一个是非 REST客户端。然后两者都将在控制器层实现与 REST/非 REST 相关的逻辑,然后调用这个可重用的服务。
存储库
这里我们应该编写与DAO相关的代码。每一个与 DB 对话的代码都应该写在这里。通常在 Springboot App 中,我们使用 JPA,每个带有 @Repository 的 JPA 存储库或我们编写查询 Dsl 或查询本身的自定义接口都属于 Repository 抽象层。
结论
- 控制器将消耗来自外部的请求
- 控制器将请求 DTO 转换为服务预期对象
- 控制器调用服务
- 服务将调用其他服务和存储库
- Repository 将对 DB 进行操作并将数据返回给 Service
- 服务将处理后的响应返回给控制器
- 控制器将响应返回给外部 七爪网七爪网-专注于分销商城,小程序定制,网站开发,定制开发,成品源码的源码交易平台