lex*_*eme 0 c# nhibernate domain-driven-design
问题
有四个实体:
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 */ }
Run Code Online (Sandbox Code Playgroud)
这四个都没有定义为组件,我不知道应该使用哪一个(用IAggregateRoot接口标记)作为聚合根.
我需要轻松访问供应商列表,类别以在创建新产品时在页面上显示它们.
然后看来Repository根据这些实体应该有三个实例.
在旁边
我见过几个大型项目.他们大量使用Vendor,State,TechnicalOptions等独立实体的列表.我认为设计具有聚合根的东西是合乎逻辑的,但我不知道DDD原则是否适用于那里.
它们看起来像不同的聚合,可以通过应用级联删除规则来确认:
级联删除规则有时被认为是判断您是否有一组实体或VO应该是聚合的好方法 - 如果父项被删除,下面聚合的所有其他部分也将被删除.因此,如果被删除的父项也删除所有子项没有意义,那么你没有聚合,你只需要一个老式的参考.
在您的情况下,如果产品被删除,您不希望级联删除所有相关类别,因为它们可能与其他产品相关(您可以将此规则应用于其他实体).所以你可能每个都有一个存储库