【发布时间】:2010-11-23 04:52:48
【问题描述】:
假设我有典型的实体 Car
class Car : Entity
{
public double MaxSpeed { get; set; }
public Color Color { get; set; }
/* ... */
}
在我的域模型中,该实体将是 Aggregate 的 根实体。
现在假设我专攻汽车。我创造了一辆法拉利,而快乐的法拉利车主喜欢用昵称来称呼他们:
class Ferrari : Car
{
public string Nickname { get; set; }
}
假设我有另一个实体,Company 实体。它将是另一个聚合的根实体。有很多人在一家公司工作,由实体 Person 表示。人可能有汽车。但是公司的总裁通常都很有钱,而且这种人,他们有法拉利:
class President : Person
{
public Ferrari Ferrari { get; set; }
}
在这种情况下,我有一个实体总裁,他在公司聚合,它持有对法拉利的引用,这是根实体的专业化另一个聚合。
从 DDD 的角度来看这是正确的吗? 我可以/应该将根实体本身的特化视为同一聚合的根实体吗?我的意思是,在我描述的域中,实体 Ferrari 也是 Car Aggregate 的根实体(因为 Ferrari 也是 Car)?
现在假设我必须将此模型保存到数据库中。我认为我的问题不取决于我将使用的 OR/M 框架。
我应该如何构建放置汽车的桌子?我应该构建一个带有“CarType”列(可能的值:“Car”、“Ferrari”)和一个可为空的 Nickname 列的 Cars 表吗?
或者我应该为 Cars 建立一个表,为 Ferraris 建立一个表,后者的 PK 是 Cars 的 FK?
谢谢!
【问题讨论】:
标签: orm domain-driven-design entity aggregate