首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >级联从聚合根目录中删除整个聚合没有意义

级联从聚合根目录中删除整个聚合没有意义
EN

Software Engineering用户
提问于 2014-04-21 18:30:30
回答 1查看 1.7K关注 0票数 2

基于这个问题的相同示例。

在Adam的Pro ASP.Net MVC 4中,有一个简单的拍卖系统对聚合和聚合根进行了讨论。有成员谁出价,项目是投标,和出价。作者说,将有一个项目和投标的总和,以项目为总根。然后,作者提到聚合根可以用来进行级联删除,在这个例子中,这意味着如果一个项目被删除,所有项目的投标都会被删除。这说得通。问题是,投标只属于项目/投标汇总,而不属于成员/出价聚合。如果我删除一个系统的成员谁提出投标,这似乎是合理的,他们的出价也被删除。然而,如果不“打破”总数,我就无法做到这一点。我也不能简单地得到一个成员的投标名单。

考虑到这个例子有多简单,我的困惑程度让我有点担心。

这是否只是一个坏的例子,成员/投标是否可以成为一个有效的汇总,并且在选择你的聚合时存在一定程度的任意性,只要你做出选择,是否有办法让模型属于多个聚合,还是我只是遗漏了什么?

在我所链接的问题中的答案是,领域驱动的开发是非常棘手的,但是对于它是如何棘手的,以及为什么这个棘手导致混乱的原因,它没有深入到足够的细节,因此我对它的问题仍然存在。

EN

回答 1

Software Engineering用户

发布于 2014-04-21 22:54:04

两个有界的上下文可以引用同一个对象。但只有一个控制着物体的寿命。

竞拍直接属于不列颠哥伦比亚省拍卖。我推荐给许多人的一本书是基于UML的彩色的彩色建模,它提供了一套很好的工具来帮助域建模。

基于颜色的建模将域对象划分为四种原型:人员/位置/事物、角色、描述符和时间/间隔。

我反复讨论了如何用DDD概念映射书中的概念。具体而言,考虑一种基于原型确定BCs和聚合根的启发式方法。

我所知道的是成员资格和拍卖是两个独立的BCs (在你的例子中)。管理会员资格的过程与管理拍卖无关(除了成员创建/投标拍卖的事实之外)。除此之外,它们是两个独立的系统

拍卖是一个时间间隔原型的例子,它发生在给定的一段时间内(因此它是一个间隔)。拍卖之外还有几个角色:拍卖师,ItemForAuction,可能还有WinningBidder。这些角色被分配给人/地点/事物原型。

例如,系统中有一个代表我的政党--迈克·布朗。在系统中,Mike实体可能有几个与其相关的角色。一个角色将是成员(来自BC成员),另一个角色可能是拍卖人(如果我决定将一个项目拍卖),另一个角色可能是投标人(如果我在拍卖中出价)。重要的是,无论我在系统中扮演哪个角色,与该角色相关的数据和功能都是孤立的。把角色看作是装饰者,或者是人们所戴的帽子,这取决于他们在做什么。

如果我能找到迈克·布朗的话。我可以问实体“您有什么角色”或“您有X角色”,实体应该能够回答。所以我可以说,迈克·布朗让我扮演你的拍卖人的角色。从拍卖者的角色,我应该有像CreateAuction,CancelAuction,ListActiveAuctions,ListCompletedAuctions这样的操作。换句话说,角色是系统的引擎。

记得我说过,拍卖是瞬间间隔原型的一个例子。它们代表域中的重要事件或句点。与时间间隔相关的另一个概念是所谓的接班人。例如,出价是拍卖的继承者。出价只存在于某一特定拍卖的范围内(即出价是拍卖总额的一部分)。

如果创建出价的用户或成员被从系统中删除,这并不否定出价被放置的事实。(离婚不等于否认你们一起生了孩子,妻子不再是你们家庭的一部分,但孩子们……让我们忽略现在孩子属于两个家庭的事实)。

作为一种假设,我倾向于的是,每隔一段时间,都会有一个主要的演员,那就是角色原型。例如,拍卖人是拍卖M-I的主要执行者。是他创造的。其他演员也参与其中。我倾向于说M的主要角色是聚合根,但一个角色实体可以参与多个M.I。

因此,主-执行器是一个M-I的工厂,它控制生命周期,但是M-I本身将是聚合根的候选。在这种情况下,拍卖是一个聚合根。它的接班人、角色、描述符和PPT是其聚合的一部分。

成员身份作为单独的有界上下文的一部分,不应该真正地直接访问出价或拍卖。为我删除一个成员实际上是终止成员M-I (设置成员的结束日期)。以及确保用户没有访问权限所涉及的任何其他逻辑。该成员仍然存在,但不活动。他的历史出价仍然存在。每个人都很幸福。

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

https://softwareengineering.stackexchange.com/questions/236543

复制
相关文章

相似问题

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