plm*_*elo 4 refactoring domain-driven-design dependency-injection ddd-repositories aggregation
我有 4 个相关实体:
地区(id,名称,自治市,邮政编码) 市(id,名称,城市) 城市(id,名称,省) 省(id,名称)
我刚刚做了一个域服务来获取与邮政编码相关的所有数据。我需要找到与之相关的区、市、市和省。所以我在我的服务中注入了这 4 个 repos。我从每个存储库读取数据,将其格式化为 (id, name) 因为这是我需要的所有数据。
我认为违反了 SRP,但找不到更好的方法来做到这一点。我已经阅读了Refactor to Facade Service,但不认为这适用于我的问题。
我的问题是: 1. 我应该将所有这些实体放入一个聚合中吗?2. 应该在哪里做数据格式化?在 repo 中的服务中还是从服务中调用的另一个类?3. 还有其他更好的解决方案吗?
提前致谢
正如您所发现的,每个域实体一个存储库不能很好地扩展。它基本上忽略了实体之间的关系。
在 ddd 中有一个聚合 root(ar) 对象的概念,它基本上是一个具有关联子对象的主节点对象。不同的领域上下文会有不同的ars。功能通常是围绕 ars 而不是单个实体设计的。
因此,请考虑让存储库支持给定 ar 所需的内容。这意味着能够进行一次邮政编码查询并返回一个由邮政编码根和附属地区、城市等组成的 ar。
要实现,您可能需要一个包含所有单个实体数据库映射及其关系的主对象。再次,重要的是关系。每个存储库都可以访问完整的映射信息。
您没有提到语言,但在 php 中是遵循这些概念的对象关系管理器示例:http : //docs.doctrine-project.org/projects/doctrine-orm/en/latest/
归档时间: |
|
查看次数: |
231 次 |
最近记录: |