Si j'ai trois entités, Project, ProjectRole et Person, où une personne peut être membre de différents projets et être dans différents rôles de projet (tels que "Project Lead" ou "Project Member") - comment modéliseriez-vous une relation?Comment modélisez-vous les rôles/relations avec Domain Driven Design?
Dans la base de données, j'ai actuellement les tableurs suivants: Project, Person, ProjectRole Project_Person avec PersonId & ProjectId comme PK et un ProjectRoleId comme une relation FK.
Je suis vraiment perdu ici car tous les modèles de domaines que je viens de proposer semblent casser une règle "DDD". Existe-t-il des «normes» pour ce problème?
J'ai jeté un coup d'oeil à une modélisation d'objet rationalisée et il y a un exemple à quoi ressemblerait un Project et ProjectMember, mais AddProjectMember() dans Project appelait ProjectMember.AddProject(). Donc Project a une liste de ProjectMembers, et chaque ProjectMember en retour a une référence au Projet. Ça me semble un peu compliqué.
mise à jour
Après avoir lu plus sur ce sujet, je vais essayer le suivant: Il y a des rôles distincts, ou mieux, les relations de modèle, qui sont d'un certain type rôle dans mon domaine. Par exemple, ProjectMember est un rôle distinct qui nous dit quelque chose au sujet de la relation qu'une personne joue dans un projet. Il contient un ProjectMembershipType qui nous en dit plus sur le rôle qu'il jouera. Je sais avec certitude que des personnes devront jouer des rôles dans un projet, alors je vais modéliser cette relation.
ProjectMembershipTypes peuvent être créés et modifiés. Ceux-ci peuvent être "chef de projet", "développeur", "conseiller externe", ou quelque chose de différent. Une personne peut avoir plusieurs rôles dans un projet et ces rôles peuvent commencer et se terminer à une certaine date. De telles relations sont modélisées par la classe 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. « Chef de projet », « Développeur », « conseiller »
public class ProjectMembershipType : IRoleType
{
public virtual int ProjectMembershipTypeId { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
// etc...
}
Je n'ai aucune idée, c'est possible, je ne suis pas sûr de savoir ce que vous voulez dire – kitsune
J'ai peur de sortir de l'ère de la base de données relationnelle mais j'ai mangé trop d'OOD ... Je fais référence à la 'Deuxième Solution' La réponse de Jamie. – xtofl