存储库过多的域服务

Domain service with too many repositories

我有 4 个相关实体:

区(id、名称、自治市、zip_code) 自治市(ID、名称、城市) 城市(id、名称、省份) 省份 (id, name)

我刚刚制作了一个域服务来获取与邮政编码相关的所有数据。我需要找到与之相关的区、市、市和省。所以我在我的服务中注入了这 4 个回购协议。我从每个存储库读取数据,将其格式化为 (id, name) 因为这是我需要的所有数据。

我认为这违反了 SRP,但找不到更好的方法。我已经阅读 Refactor to Facade Service 但认为这不适用于我的问题。

我的问题是: 1. 我应该将所有这些实体放入一个聚合中吗? 2.数据格式化应该在哪里进行?在 repo 服务中或从服务调用的另一个 class? 3. 还有其他更好的解决方案吗?

提前致谢

如您所见,每个域实体一个存储库不能很好地扩展。它基本上忽略了实体之间的关系。

在 ddd 中有一个聚合根 (ar) 对象的概念,它基本上是一个具有关联子对象的主节点对象。不同的域上下文将具有不同的ar。功能通常是围绕 ars 而不是单个实体设计的。

因此请考虑让存储库支持给定 ar 所需的内容。这意味着能够执行一个邮政编码查询并返回一个由邮政编码根和附属地区、城市等组成的 ar

要实施,您可能需要一个主对象,其中包含所有单独的实体数据库映射及其关系。同样,重要的是关系。每个存储库都可以访问完整的映射信息。

您没有提到语言,但在 php 这里有一个遵循这些概念的对象关系管理器示例:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/