我有4个相关实体:
区(id,名,市,zip_code)市(id,name,city)市(id,name,省)省(id,name)
我刚刚做了一个域服务来获取所有与Zip代码相关的数据。我需要找到与之相关的地区、市、市和省。所以我要为我注射这4种药物。我从每个存储库读取数据,将其格式化为(id,name),因为这是我从它们需要的所有数据。
我认为这违反了SRP,但是找不到更好的方法来做这件事。我已经读过立面服务重构了,但不要认为这适用于我的问题。
我的问题是: 1.我是否应该将所有这些实体合并到一个聚合中? 2.应该在哪里进行数据形成?其他更好的解决方案? 3.其他更好的解决方案吗?
提前感谢
发布于 2015-12-05 14:20:26
正如您所发现的,每个域实体都有一个存储库不能很好地扩展。它基本上忽略了实体之间的关系。
在ddd中,有一个聚合根(Ar)对象的概念,它基本上是一个具有关联子对象的主节点对象。不同的域上下文将有不同的ars。功能通常是围绕ars设计的,而不是单个实体。
因此,考虑拥有一个存储库支持给定的ar所需的内容。这意味着能够执行一个邮政编码查询,并返回一个由邮政编码根和附加区、城市等组成的ar。
要实现,您可能需要一个主对象,它包含所有单个实体数据库映射以及它们之间的关系。再说一次,关系才是重要的。每个存储库都可以访问完整的映射信息。
您没有提到一种语言,但是在php中,有一个遵循以下概念的对象关系管理器的示例:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/
https://stackoverflow.com/questions/34105343
复制相似问题