实体和聚合之间的UML区别是什么?

时间:2015-04-07 22:35:58

标签: uml domain-driven-design

a post我看来,似乎Entity只是Aggregate的一个子集。我已经了解了Domain-Driven DesignImplementing Domain-Driven Design中的两种模式,并且我试图理解它们之间的UML差异。

让我们考虑一个简单的课程。它是一封持有信息的信件,接收者,可能还有发件人。

enter image description here

我猜这个Letter类会被视为实体吗?

现在让我们说我们想扩展我们的包裹业务以便能够发送包裹,然后它可能如下所示。

enter image description here

由于如果整个包丢失,包中的所有项目都将丢失,我们使用UML Composition relation填充菱形)。我们还希望通过禁止在Package外部更改或删除Items来保持Package的一致性。 description of Aggregate读取

  

聚合根保证了所做更改的一致性   通过禁止持有的外部对象来聚合   对其成员的引用。

因此,我们确保在Aggregate中隐藏了Composition关系,并保留了不变的不变量。

我的问题是:
我们可以说实体和聚合之间的UML差异是实体包含任何组合关系,而聚合包含至少一个组合关系吗?

3 个答案:

答案 0 :(得分:2)

要回答你的问题,不能不这么说。聚合根是实体本身,可能也可能不是由子实体组成。子实体也可以由其他实体组成(虽然通常不推荐)。

聚合根负责维护状态并强制执行本身及其子实体的不变量。

总而言之,聚合和子实体每个都可以包含0个或更多个子实体。但是,所有子实体都需要聚合根。

答案 1 :(得分:1)

实体代表MVC中的M(odel)。它通常表示为<<entity>>刻板类。

Aggregate是聚合不同其他类的类的同义词。这意味着它的生命周期需要其他类。除了相关的类实例将与复合类一起消亡之外,还有一个类似的复合词。

回答你的最后一个问题:一个实体是atomar。它不会聚合任何东西。

编辑因为我刚刚在工作中遇到过它:有些实体组成/聚合其他实体。 30年前,在大学时,我们称它们为空中飞人,因为它们悬挂在另外两个实体之间并将它们联系起来。现在我称他们为协会班。

答案 2 :(得分:0)

域驱动设计中的实体(DDD)只是UML术语中的一类刻板印象。该构造型向您指示该对象由显式唯一标识符标识,而不是其属性。

对象模型中的对象协同工作。它们一起形成对象图。 Aggregate表示需要一起考虑的一组对象,因为不这样做可能会使一个或多个对象处于无效状态。

  

“我们可以说实体和聚合之间的UML差异是实体不包含任何组合关系而聚合包含至少一个组合关系吗?”

没有。 UML组合或聚合关联与DDD聚合或实体的概念无关。

例如,可以在没有组合或(UML)聚合的情况下用UML表示Transaction-LineItem关系。

交易--- 1 -------- 0 .. * --- LineItem

上面建模的这两个对象都需要是同一个(DDD)聚合的一部分,因为它们需要被视为一对。如果单独受到虐待,可能会使其合并状态无效或不正确。