我正在练习领域驱动设计,那么为什么不构建一个演示产品目录项目呢?显然Product
这里是核心域,但由于我想让项目更有趣,我很想支持嵌套Category
层次结构。换句话说, aCategory
可以有多个 child Category
。
此外,我想与域分离Category
并Product
使其成为自己的支持域。
问题:标记Category
为 AggregateRoot 对我来说听起来不对。ACategory
可以有很多孩子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
}
而且我实际上有AggregateRoot
内在的东西,Entity
因为我猜只有一个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 和所有其他相关的很酷的东西,如领域事件、事件溯源等的新手。如果有经验的人能告诉我我是否走对了路,我将不胜感激。