Project、ProjectRole、Person という 3 つのエンティティがあり、Person が異なるプロジェクトのメンバーになり、異なるプロジェクト ロール (「プロジェクト リーダー」や「プロジェクト メンバー」など) になることができる場合、そのような関係をどのようにモデル化しますか? ?
データベースには、現在、次のテーブルがあります: Project、Person、ProjectRole Project_Person、PersonId と ProjectId を PK、ProjectRoleId を FK Relationship として持ちます。
私が思いついたすべてのドメインモデルが「DDD」ルールに違反しているように見えるので、ここで本当に途方に暮れています。この問題の「基準」はありますか?
合理化されたオブジェクト モデリングを見てみたところ、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...
}