提问者:小点点

使用C#存储库应用DDD原则


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

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

我遇到的问题是,如何应对创建新实体所需的情况。例如,域逻辑规定:

帐户可以添加到< code >组(创建< code >成员实体)。

>

  • 将帐户添加到组时,新成员实体的 Value 属性必须设置为组中已有的成员总数。

    组中的每个其他成员的值必须递增1。

    我可以将它实现为< code>Group上的< code > Member add Member(Account Account)方法。但是,该方法需要实例化一个新的< code >成员来添加到组的成员集合中。

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

    我考虑过在具体实现可以实现的< code>Group对象上定义< code >抽象受保护成员CreateMember()方法的可能性,但这对我来说似乎很混乱,并担心我可能误解了一些更基本的东西。

    在努力忠于DDD原则的同时,我该如何实施这一模式呢?


  • 共2个答案

    匿名用户

    您可能希望创建一个负责创建新成员对象的MemberFactory(作为域服务)。有关一个很好的示例,请参阅此答案。

    匿名用户

    我认为这里的根本问题是域对象是抽象的。域对象几乎应该始终是实现所有必要的域逻辑的具体类(尽管有一些例外)。

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

    您应该重新思考您的设计,使您的实体成为具体的类。总之,您的域对象应该实现所有的域逻辑,而不考虑外部服务/存储库。