【问题标题】:Is there a rule organizes the relationships between entities是否有规则组织实体之间的关系
【发布时间】:2018-02-05 22:18:34
【问题描述】:

我想知道有一个规则可以组织实体之间的关系

例如,如果 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; }
}

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

【问题讨论】:

  • 如果您不知道Phase 是否需要知道它属于哪个Project,我们无法告诉您。一个Task,考虑到它是Phase的一个孩子,另一方面,不需要直接知道(因为它可以通过Phase关系知道)
  • 这一切都取决于您的业务需求。如果您没有给您任何业务需求,那么您需要根据您要解决的问题来弥补它们。没有一种正确的方法可以做到这一点。这完全取决于您要解决的问题。

标签: c# oop domain-driven-design


【解决方案1】:

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

另一方面,它是一个完美且更优雅的方式,可以使用例如 sql 外键约束和xsd 文件。这也将使您的数据自我记录并独立于应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2021-04-13
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多