4

我有一个相对简单的域模型,如图所示。我想在 DDD 定义的域对象中维护这个逻辑。

每个域对象都是一个抽象类,只包含其各自的成员和域逻辑。这些类的具体实现由存储库返回,提供给服务(使用 DI)。

我遇到的麻烦是了解如何处理创建新实体所需的情况。例如,域逻辑规定:

可以将帐户添加到Group(创建Member实体)。

  • 将帐户添加到组时,新Member实体的Value属性必须设置为已在Group.

  • Group 的每个其他成员的值都必须增加 1。

我可以将其实现Member AddMember(Account account)Group. 但是,此方法需要以某种方式实例化一个新Member的以添加到 Group 的 Members 集合中。

由于域对象没有对应用程序中更上层的层的引用,并且域对象本身是抽象的,我不确定如何构建 Member 的新实例。

我考虑过abstract protected Member CreateMember()在对象上定义一个具体实现可以实现的方法的可能性,Group但这对我来说似乎很混乱,并且让我担心我可能误解了更基本的东西。

在努力忠于 DDD 原则的同时,我将如何实施这个模型?

领域实体图

4

2 回答 2

2

您可能想要创建一个负责创建新成员对象的 MemberFactory(作为域服务)。请参阅此答案以获取一个很好的示例。

于 2012-07-16T13:16:12.637 回答
1

我认为这里的基本问题是您的域对象是抽象的。域对象应该几乎总是具体的类(尽管有一些例外),它们实现了所有必要的域逻辑。

存储库只是与外部数据源(例如数据库)的接口,不应影响您的域的工作方式。通过让存储库返回对象的实际实现,您将域逻辑与存储库耦合。

您应该重新考虑您的设计,以便您的实体是具体的类。一起,您的域对象应该实现所有域逻辑,而不考虑外部服务/存储库。

于 2012-07-16T16:12:32.887 回答