【发布时间】:2010-01-03 22:08:57
【问题描述】:
问题的简短版本:“是否可以有一个超类,有 2 个子类,一个是实体,另一个是值对象?”
到更长的版本: T 有一个 Team 超类。 团队有Master、Helpers和Code。 然后我有 DefaultTeam,Team 的子类,它是一个具有 唯一 **Code**** 的实体,具有其域标识。 然后我有 **ExecutionTeam,它是 Team 的子类,并且有一个额外的属性 OriginalTeam:
public abstract class Team{
public string Code{ get; protected set; }
public Worker Master{ get; protected set; }
public IList<Worker > Helpers { get; protected set; }
...
}
public class DefaultTeam: Team
{
}
public class ExecutionTeam : Team
{
public virtual string Code { get { return OriginalTeam.Code; } }
public virtual DefaultTeam OriginalTeam { get; private set; }
...
}
ExecutionTeam,是执行Task的团队。 当需要执行一个Task时,我们选择一个DefaultTeam来执行它。 但是我们可以改变 DefaultTeam 中的 Helpers(主人永远不会改变)。
执行任务的团队是 DefaultTeam (OriginalTeam) 的变体,但其中的 Helpers 仅用于那个任务。
ExecutionTeam 将具有与 OriginalTeam 相同的代码。所以ExecutionTeam 没有唯一的身份。 如果同一 DefaultTeam 执行 10 次任务,则将有 10 个 ExecutionTeams 具有相同的代码(具有相同的 OriginalTeam)。所以 ExecutionTeam 不能是实体。
但是让一个实体和一个值对象共享同一个超类(都是团队)有点奇怪。也许这个领域模型有问题。
需要意见。
谢谢
【问题讨论】:
标签: domain-driven-design class-hierarchy