我正在实践领域驱动设计,那么为什么不建立一个演示产品目录项目?显然Product
在这里是核心领域,但因为我喜欢让项目更有趣,我很乐意支持嵌套Category
层次结构。换句话说,Category
可能有许多孩子Category
。领域驱动设计:如何模拟嵌套产品类别层次结构?更糟糕的是,如果产品类别是一个聚合根?
此外,我想分开Category
域从Product
域,并使其自己的支持域。
问题:标记Category
as AggregateRoot听起来不正确。 A Category
可能有许多孩子Category
,这也是AggregateRoots?!!我怎样才能对这个建模进行建模?嵌套产品类别在电子商务现实生活中非常普遍。
命名空间DL.Demo.Domain.Shared
public abstract class ValueObjectBase<T> : IEquatable<T>
where T : ValueObjectBase<T>
{
public abstract bool Equals(T other);
public abstract override bool Equals(object obj);
public abstract override int GetHashCode();
}
public abstract class EntityBase : IEquatable<EntityBase>
{
public Guid Id { get; private set; }
protected EntityBase()
{
this.Id = Guid.NewGuid();
}
// Some Object overrides
}
,我实际上是从Entity
AggregateRoot
inherents因为我想只有一个Entity
可能是一个AggregateRoot
?
public abstract class AggregateRoot : EntityBase
{
}
命名空间DL.Demo.Domain.Catalog
public class Category : AggregateRoot
{
public string Name { get; private set; }
public Guid? ParentCategoryId { get; private set; }
public CategoryStatus CategoryStatus { get; private set; }
}
有AggregateRoot的嵌套列表只是不健全的权利我。如果您不将Category
标记为AggregateRoot,那么您将如何对此进行建模?
我是DDD和所有其他相关的酷的东西,如域名事件,事件采购等新的我将不胜感激,如果有经验的人可以告诉我,如果我去正确的方式。
那么,一个类别有什么行为?你需要在这些行为中执行哪些不变量?有很多方法可以模拟这个问题,这完全取决于行为和真实的不变量。 ProductCategory听起来不像一个非常有趣的聚合。我怀疑大多数行为将会是CRUD,因此域模型模式可能不是正确的选择。 – plalx
+1,我不会使用DDD战术模式(聚合等)为'类别',除非他们干涉'产品'域规则中复杂的方式。 – guillaume31
我正在做一些事情,因为这只是一个演示项目:当网站的管理员决定停用某个类别时,需要停用直接链接到该类别的所有产品以及该类别下的所有子类别,以及所有产品链接到这些类别?也可能需要发送电子邮件给所有其他管理员。此外,我们可能需要支持在其他类别下移动类别。这是一个复杂行为的好例子吗? –