0

问题

有四个实体:

class Product : Entity<Product> {
    public virtual String Title { get; set; }
    public virtual Category Category { get; set; }
    public virtual Vendor Vendor { get; set; }
}

class Category : Entity<Category> { /* properties */ }
class Vendor : Entity<Vendor> { /* properties */ }

这四个都没有定义为组件,我不知道应该使用哪个(用IAggregateRoot接口标记)作为聚合根。

我需要在创建新产品时轻松访问供应商列表、类别以在页面上显示它们。

Repository然后,根据这些实体,似乎应该有三个实例。

在旁边

我见过几个大型项目。他们大量使用独立实体的列表,如供应商、状态、技术选项。我认为设计具有聚合根的东西是合乎逻辑的,但我不知道 DDD 原则是否适合那里。

4

2 回答 2

7

它们看起来像不同的聚合,可以通过应用级联删除规则来确认:

级联删除规则有时被引用为判断您是否有一组应该是聚合的实体或 VO 的好方法——如果父级被删除,则下面该聚合的所有其他部分也将被删除。因此,如果被删除的父级也会删除所有子级没有意义,那么您就没有聚合,您只有一个很好的老式参考。

在您的情况下,如果产品被删除,您不希望级联删除所有相关类别,因为它们可能与其他产品相关(您可以将此规则应用于其他实体)。因此,您可能会为每个人拥有一个存储库

于 2013-08-05T08:16:43.467 回答
0

你不应该让一个 AR 引用另一个实例。而是通过 ID 引用或使用值对象。

然后尽量不要查询你的领域模型,因为这会导致一些懒惰和其他讨厌的设计。而是创建一个瘦查询层来返回您需要的数据。您甚至可能希望对查询层的某些数据进行非规范化以提高性能。

于 2013-08-05T12:46:29.017 回答