首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >DDD中的多对多关系

DDD中的多对多关系
EN

Stack Overflow用户
提问于 2011-04-27 22:54:24
回答 2查看 4.9K关注 0票数 22

我是DDD的新手,我被多对多的关系所困扰。例如,我们有两个聚合根- Tasks和Workers。

Contract绝对不是聚合根,因为如果没有Task和Worker,它就没有意义。因此,它应该是某个聚合的一部分。但是它应该属于哪个聚合呢?我们需要知道所有任务合同的汇总成本和所有员工合同的汇总成本。对我来说,在Task和Worker中都有合同集合是很自然的。

好吧,我可以将成本计算转移到域服务,但我担心这是向贫血模型迈出的一步。是否有处理多对多关系和保留reach域模型的通用方法?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2011-04-27 23:01:22

通过关注侧栏中链接的相关问题,我发现了这篇有趣的文章:

DDD & Many to Many Object Relational Mapping

它似乎推荐了我直觉上的想法:工人和任务实际上并不自然地依赖于合同。也就是说,在没有“契约”概念的情况下,“工作者”的概念仍然有意义(对于任务也是如此),因此包含该概念的实体不应该依赖于契约实体。

要显示分配给给定任务的合同或分配给给定员工的合同,您需要运行域查询。这实际上是对域服务的一种适当的使用,如果您仔细考虑一下,它会更好地反映您的域的实际情况。

我还注意到您说"Contract绝对不是聚合根,因为没有Task和Worker它就没有意义。“这实际上就是契约为聚合根的确切原因。

因此,我的建议,结合arootbeer从评论中获得的见解:

票数 17
EN

Stack Overflow用户

发布于 2011-04-27 23:10:25

在我看来,Contract在您的设计中是一流的对象。您声称它在workertask的上下文之外都没有意义,这当然是正确的,但这并不意味着它本身就不是聚合根。

根据与之相关的taskworker的某些属性,Contract大概有自己的计算成本的逻辑。类似地,TaskWorker包含与Contract无关的上下文。

您需要跳过的间隙是将与相关的上下文移动到Contract对象中。让它存储worker的速率和task的周期(除了上面仅隐式建模的相应it之外),并动态地计算成本。

-编辑--

正如Domenic所说,你的评论是一个很好的后续问题的候选者。但我要说的是,一旦您将TaskWorker I添加到Contract上,报告就变成了一项微不足道的任务。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5806120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档