Personが異なるプロジェクトのメンバーになり、異なるプロジェクトロール(「プロジェクトリード」や「プロジェクトメンバー」など)に存在するProject、ProjectRole、Personの3つのエンティティがある場合関係?データベースでDomain Driven Designを使用してどのようにロール/リレーションシップをモデル化していますか?
、私は現在、次のtablers持っている:プロジェクト、人、PKとFKの関係などProjectRoleIdとしてPERSONID & PROJECTIDとProjectRole Project_Personを。
私が思いつくすべてのドメインモデルは、いくつかの "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:ie。 「プロジェクトマネージャ」、「開発」、「顧問」
public class ProjectMembershipType : IRoleType
{
public virtual int ProjectMembershipTypeId { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
// etc...
}
私は考えていませんが、あなたは何を意味するのかよく分かりません – kitsune
私はリレーショナルデータベースの時代からデートしていますが、あまりにも多くのOODを食べました...私は 'Second Solution'ジェイミーの答え。 – xtofl