gpt4 book ai didi

dependency-injection - 具有太多存储库的域服务

转载 作者:行者123 更新时间:2023-12-04 08:20:08 27 4
gpt4 key购买 nike

我有 4 个相关实体:

区(id、名称、市镇、邮政编码)
市镇(ID、名称、城市)
城市(id,名称,省)
省份(ID,名称)

我刚刚创建了一个域服务来获取与邮政编码相关的所有数据。我需要找到与之相关的区、市、市和省。所以我在我的服务中注入(inject)了这 4 个存储库。我从每个存储库中读取数据,将其格式化为 (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/

关于dependency-injection - 具有太多存储库的域服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34105343/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com