C# 领域模型聚合

C# 领域模型聚合,c#,architecture,domain-driven-design,domain-model,C#,Architecture,Domain Driven Design,Domain Model,我刚刚读了一章关于聚合的内容,发现我误解了一些东西。 我们有三个目标:成员、项目、投标。 以下是本书的代码片段: public class Member { public string Id {get; set;} ... } public class Item { public string Id {get; set;} public IList<Bid> Bids {get; set;} ... } public class Bid { p

我刚刚读了一章关于聚合的内容,发现我误解了一些东西。 我们有三个目标:成员、项目、投标。 以下是本书的代码片段:

public class Member
{
   public string Id {get; set;}
   ...
}

public class Item
{
   public string Id {get; set;}
   public IList<Bid> Bids {get; set;}
   ...
}

public class Bid
{
   public Member Member {get; set;}
   ...
}
公共类成员
{
公共字符串Id{get;set;}
...
}
公共类项目
{
公共字符串Id{get;set;}
公共IList出价{get;set;}
...
}
公开课投标
{
公共成员成员{get;set;}
...
}
Autor写了那个项目,它的出价是一个聚合,因为没有项目的出价是没有意义的。所以Item和Member是聚合根。
然而,我认为,没有会员的参与,出价是没有意义的。这似乎是合乎逻辑的。那么,在这种情况下,投标是什么?它是项目集合的一部分吗?

虽然不完全相同,但这与Richard Cirerol的答案非常相似,这是一个不错的答案


但是,我想指出的是,图中显示bid引用了一个成员,因此可以伸出手来获取该信息,但该成员无法进入。进入的唯一途径是通过物品。因此,该项是示例中的控制点。这有助于保持什么可以做什么清晰和事务性。

虽然不完全相同,但这与Richard Cirerol的答案非常相似,这是一个不错的答案


但是,我想指出的是,图中显示bid引用了一个成员,因此可以伸出手来获取该信息,但该成员无法进入。进入的唯一途径是通过物品。因此,该项是示例中的控制点。这有助于保持可以做的事情的清晰和事务性。

首先,聚合聚合根是不同的概念。在这种情况下,Item和Bid可能是同一个聚合的一部分,但只有一个,我认为Item是聚合根(AR)

定义哪一类是AR很大程度上取决于有界上下文(BC)。此外,该成员类可能仅在该BC中表示为一个简单Id,而这不是您可能在不同BC中使用的成员(您看到DDD非常棘手)


项目涉及投标和成员,共同构成一个聚合,但项目是聚合根,即其他人用于管理聚合的外观对象。

首先,聚合聚合根是不同的概念。在这种情况下,Item和Bid可能是同一个聚合的一部分,但只有一个,我认为Item是聚合根(AR)

定义哪一类是AR很大程度上取决于有界上下文(BC)。此外,该成员类可能仅在该BC中表示为一个简单Id,而这不是您可能在不同BC中使用的成员(您看到DDD非常棘手)


该项目同时涉及投标和成员,共同构成一个聚合,但该项目是聚合根,即其他人用于管理聚合的facade对象。

那么您如何检索成员的投标?我想成员类需要引用该成员投标的项目。然后在Item aggregate根目录上可以有一个函数来检索一个成员对这个项目的出价。我写了这个项目和成员是AR。嗯,我不同意聚合可能在同一个域模型中的不同BC中发生。@Meta Knight建模域与数据库存储无关,这个示例非常简单,因此它类似于ORM实体的建模方式,但仅此而已。我总是认为域和持久性是不同的,所以在处理域时我不关心存储。@Danil成员在此上下文中不是AR。如果所有的合计都是相同的,为什么BC会起作用?顺便说一句,他们可能是,也可能不是,在域上的depending。那么你将如何检索成员的出价?我想成员类需要引用该成员投标的项目。然后在Item aggregate根目录上可以有一个函数来检索一个成员对这个项目的出价。我写了这个项目和成员是AR。嗯,我不同意聚合可能在同一个域模型中的不同BC中发生。@Meta Knight建模域与数据库存储无关,这个示例非常简单,因此它类似于ORM实体的建模方式,但仅此而已。我总是认为域和持久性是不同的,所以在处理域时我不关心存储。@Danil成员在此上下文中不是AR。如果所有的合计都是相同的,为什么BC会起作用?顺便说一句,他们可能是,也可能不是,在域名上。