tsc*_*904 6 spring domain-driven-design spring-data spring-boot
假设我们有两个实体,EntityA和EntityB。两个实体都有一个存储库来查询数据库,EntityARepository并且EntityBRepository. 也有为他们俩提供的服务,EntityAService和EntityBService.
现在 中有一个方法EntityBService,它也需要使用EntityA. 这样做的正确方法是什么?
EntityBService使用EntityARepository吗?EntityBService使用EntityAService?我可以看到直接使用存储库可能会非常方便,但如果不仅有两个实体,它似乎也会变得有点混乱。
是否有围绕此主题或建议的通用设计模式?
Krz*_*cki 12
太长了;这取决于!
如果您尝试遵循领域驱动设计,我认为区分service和是个好主意repository。有不同的定义,细节上可能有所不同,但我会坚持使用 Martin Fowler 的Repository定义:
(...) 存储库在域和数据映射层之间进行中介,就像内存中的域对象集合一样。(...)
和服务:
服务层从连接客户端层的角度定义了应用程序的边界 [Cockburn PloP] 及其可用操作集。它封装了应用程序的业务逻辑,在其操作的实现中控制事务并协调响应。
值得指出的是,这service不仅仅是repository+业务逻辑。对于大多数简单的场景,repository只需访问单个数据库,但对于高级场景,创建单个实体可能需要访问多个数据库,因此repository作用是从层中删除此 woffle service。
这是你可以想到的:
EntityARepositoryin 。这是一个简单的例子:EntityBServiceEntityAEntityA
EntityBService对 执行操作EntityB,但它纯粹依赖于EntityA状态。
EntityAServicein 。这是一个简单的例子:EntityBServiceEntityAEntityA
EntityBService对EntityB和执行操作EntityA,如果不存在则稍后需要创建 - 创建涉及业务逻辑,例如检查是否允许(例如基于用户角色)。
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |