假设我有典型的实体Car
class Car : Entity
{
public double MaxSpeed { get; set; }
public Color Color { get; set; }
/* ... */
}
在我的域模型中,这个实体将是Aggregate的根实体。
现在假设我专攻汽车。我创造了一辆法拉利,而快乐的法拉利车主喜欢给他们起一个绰号:
class Ferrari : Car
{
public string Nickname { get; set; }
}
假设我有另一个实体,即公司实体。它将是另一个Aggregate的根实体。有很多人在公司工作,由实体Person表示。人可能有汽车。但是一家公司的总裁通常都很有钱,这种人,他们有法拉利:
class President : Person
{
public Ferrari Ferrari { get; set; }
}
在这种情况下,我的实体 President位于Company Aggregate内部,它持有对 Ferrari 的引用,这是另一个聚合的根实体的专业化。
鉴于 DDD,这是正确的吗?我可以/应该将根实体本身的专业化视为同一聚合的根实体吗?我的意思是,在我描述的领域中,实体 Ferrari 也是 Car Aggregate 的根实体(因为 Ferrari 也是 Car)?
现在假设我必须将此模型持久保存到 Database。我认为我的问题不取决于我将使用的 OR/M 框架。
我应该如何建造装有 Cars 的桌子?我应该构建一个带有“CarType”列(可能的值:“Car”、“Ferrari”)和一个可为空的 Nickname 列的 Cars 表吗?
或者我应该为汽车和法拉利建立一个表,后者的 PK 是汽车的 FK?
谢谢!