【发布时间】:2010-10-15 22:08:51
【问题描述】:
如果我有三个实体,Project、ProjectRole 和 Person,其中一个 Person 可以是不同项目的成员并处于不同的项目角色(例如“项目主管”或“项目成员”) - 您将如何建模这样的关系?
在数据库中,我目前有以下表格:Project、Person、ProjectRole Project_Person,其中 PersonId 和 ProjectId 作为 PK,ProjectRoleId 作为 FK 关系。
我真的很茫然,因为我提出的所有领域模型似乎都违反了一些“DDD”规则。这个问题有什么“标准”吗?
我查看了 Streamlined Object Modeling 并且有一个 Project 和 ProjectMember 的示例,但 Project 中的 AddProjectMember() 会调用 ProjectMember.AddProject()。所以 Project 有一个 ProjectMembers 列表,并且每个 ProjectMember 作为回报都有一个对 Project 的引用。对我来说看起来有点令人费解。
更新
阅读有关此主题的更多信息后,我将尝试以下操作:在我的域中存在不同的角色,或者更好的模型关系,它们属于特定的角色类型。例如,ProjectMember 是一个独特的角色,它告诉我们有关 Person 在项目中所扮演的关系的一些信息。它包含一个 ProjectMembershipType,它告诉我们更多关于它将扮演的角色。我确实知道人们必须在项目中扮演角色,所以我将模拟这种关系。
ProjectMembershipTypes 可以被创建和修改。这些可以是“项目负责人”、“开发人员”、“外部顾问”或其他名称。
一个人在一个项目中可以有多个角色,这些角色可以在某个日期开始和结束。此类关系由 ProjectMember 类建模。
public class ProjectMember : IRole
{
public virtual int ProjectMemberId { get; set; }
public virtual ProjectMembershipType ProjectMembershipType { get; set; }
public virtual Person Person { get; set; }
public virtual Project Project { get; set; }
public virtual DateTime From { get; set; }
public virtual DateTime Thru { get; set; }
// etc...
}
ProjectMembershipType:即。 “项目经理”、“开发人员”、“顾问”
public class ProjectMembershipType : IRoleType
{
public virtual int ProjectMembershipTypeId { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
// etc...
}
【问题讨论】:
标签: domain-driven-design entity-relationship