如果我有三个实体,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 有一个 ProjectMember 列表,并且每个 ProjectMember 作为回报都有一个对该项目的引用。对我来说看起来有点令人费解。
更新
在阅读了有关此主题的更多信息后,我将尝试以下操作: 在我的领域中有不同的角色,或者更好的模型关系,它们属于某种角色类型。例如,ProjectMember 是一个独特的角色,它告诉我们有关人员在项目中所扮演的关系的一些信息。它包含一个 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...
}