【发布时间】:2017-12-28 19:16:25
【问题描述】:
我正在尝试使用 DDD 指南设计电子商务系统的域模型。我有一种情况,我有 2 种不同类型的产品。一种产品是“项目”,另一种产品是“包裹”(项目组/捆绑)。到目前为止,我的域模型看起来像这样
public abstract class Product : IAggregateRoot
{
public string ProductId { get; protected set; }
// Many to Many relationship between Item and Package
protected List<ItemPackageRelationship> ItemPackages => new List<ItemPackageRelationship>();
protected List<Image> Images => new List<Image>();
// Other properties shared between Item and Package
}
public class Item : Product
{
// All properties and methods specific to Item
public void SetImages(List<string> images)
{
// Set images for Item has its own business logic
// Example: number of allowed images, size of image etc
}
}
public class Package : Product
{
// All properties and method related to package
public void SetImages(List<string> images)
{
// Set images for Package has its own business logic
// Exampe: number of allowed images, size of image etc
}
}
所有行为都在 Item 和 Package 类中定义,而 Product 类只是具有共享属性。最初我想创建 2 个完全独立的聚合根(项目和包)并且没有产品实体。我需要 Product 的唯一原因是系统中的 Unique ProductId。并且与其他实体(如图像)的所有关系都需要基于 ProductId。
我不是 100% 确信我正在设计的内容是正确的,并且需要在这里输入一些信息。创建一个 Base 实体只是为了共享一些属性是违反 DDD 的任何原则的吗?你们还有什么建议可以改进我的领域模型的设计吗?
非常感谢。
【问题讨论】:
-
EF 类模型不是域模型。它是数据访问层的一部分,它应该被设计为尽可能顺利地执行该任务。意识到这一点应该可以帮助您设置正确的优先级。对于其余部分,这是相当基于意见的。
标签: c# entity-framework domain-driven-design