是否有规则组织实体之间的关系

时间:2018-02-05 22:18:34

标签: c# oop domain-driven-design

我想知道有一条规则来组织实体之间的关系

例如,如果a具有以下两个实体

public class Project : IAggregateRoot<long?>, IAccountEntity
{

    protected virtual IList<Phase> Phases { get; set; }

}

public class Phase : IAggregateRoot<long?>, IAccountEntity
{

    public virtual IList<Task> Tasks { get; set; }

    [RequiredAspect]
    public virtual Project Project { get; set; }
}

在这个例子中,我有一个项目,项目有很多阶段,同时阶段引用项目,它有很多任务我想知道一个阶段或任务是否必须知道哪个项目是相关的?或者任务必须知道哪个阶段相关?,或者如果阶段引用该项目,我们必须指定项目有多个阶段。

1 个答案:

答案 0 :(得分:0)

这取决于你的对象的目标。通常,最好避免对象中的双向关系。它增加了复杂性并且初始化变得困难。对象应仅封装最必要的数据/状态,并应关注系统的操作和行为。想一想任务或阶段的行为方式,这将定义他们是否需要彼此。

另一方面,使用例如sql外键约束,在数据库或图表和模式(xml / json模式)中描述/嵌入/强制执行此类规则和数据关系是完美和更优雅的。 xsd文件。这也可以使您的数据自我记录并与应用程序无关。