【发布时间】:2015-06-01 14:53:19
【问题描述】:
在领域驱动设计中,我们鼓励构建丰富的实体来表达领域中的真实概念。
假设我们有一个实体 Vehicle,它通过身份引用聚合根 Person - Vehicle 由 Person 拥有。
但是,Vehicle 可以在没有所有者的情况下存在,比如在它被制造出来之后。
您将如何建模?
一种方法是使用Nullable 类型:
public class Vehicle : DomainEntity<Guid>
{
public Guid? Owner { get; private set; }
public Vehicle(...)
: base(Guid.NewGuid())
{
//...
}
public Vehicle(Guid owner, ...)
: base(Guid.NewGuid())
{
Owner = owner;
//...
}
}
另一种方法是使用多个类和继承:
public class Vehicle : DomainEntity<Guid>
{
public Vehicle(...)
: base(Guid.NewGuid())
{
//...
}
}
public class OwnedVehicle : Vehicle
{
public Guid Owner { get; private set; }
public OwnedVehicle(Guid owner, ...)
: base(Guid.NewGuid())
{
Owner = owner;
//...
}
}
我更喜欢使用第二种方法,但是真的可以像这样对聚合根进行建模吗?
聚合根到底是什么? Vehicle 或 OwnedVehicle?
我们现在是否会有两个独立的存储库,或者存储库会返回基本类型Vehicle?这意味着我们需要强制转换 - 不理想。
【问题讨论】:
-
如果
Vehicle由Person拥有,那么Person会拥有零个或多个对Vehicles的引用吗?您给出的示例受到使用关系数据库所施加的约束的约束。 IE。它受到持久性问题的技术性限制。 -
听起来您正在处理多个有界上下文:例如制造和销售
标签: domain-driven-design ddd-repositories aggregateroot