gpt4 book ai didi

domain-driven-design - 您如何使用领域驱动设计为角色/关系建模?

转载 作者:行者123 更新时间:2023-12-04 20:26:01 24 4
gpt4 key购买 nike

如果我有三个实体,Project、ProjectRole 和 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 是一个独特的角色,它告诉我们有关人员在项目中所扮演的关系的一些信息。它包含一个 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...
}

项目成员类型:即。 “项目经理”、“开发人员”、“顾问”
public class ProjectMembershipType : IRoleType
{
public virtual int ProjectMembershipTypeId { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }

// etc...
}

最佳答案

这是我将如何处理它:

class Person
{
string Name { get; set; }
IList<Role> Roles { get; private set; }
}

class Role
{
string Name { get; set; }
string Description { get; set; }
IList<Person> Members { get; private set; }
}

class Project
{
string Name { get; set; }
string Description { get; set; }
IList<ProjectMember> Members { get; private set; }
}

class ProjectMember
{
Project Project { get; private set; }
Person Person { get; set; }
Role Role { get; set; }
}

项目成员类(class)将他们聚集在一起。此模型使您可以灵活地将同一个人分配给具有不同角色的不同项目(例如,他可能是 ProjectA 上的开发人员,以及 ProjectB 上的测试员)。

请不要创建特定于角色的类 - 已经学到了这一课。

我创建了一个 sample app为了证明这一点(它也包括关系):
  • 运行“bin\debug\RolesRelationshipsSample.exe”
  • 双击库图标创建实体
  • 拖放它们以分配适当的关系

  • 随意使用代码。希望你觉得它有用。

    关于domain-driven-design - 您如何使用领域驱动设计为角色/关系建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/689436/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com