2

Je suis assez nouveau à DDD et j'ai lu quelques articles sur le concept alors pardonnez si je manque de connaissances. Je suis curieux de savoir comment cet exemple devrait être modélisé avec des racines agrégées.Aider à choisir mes racines d'agrégats DDD dans un scenerio fourni?

La base est: Il y a un employé, une réunion et des commentaires. Chaque employé peut assister à une réunion où il peut faire des commentaires. Les commentaires sont suivis selon l'employé et la réunion. Chaque réunion et employé ont des identifiants uniques. Si je voulais afficher tous les commentaires d'une réunion, quel que soit l'employé, dois-je d'abord obtenir tous les employés qui appartiennent à cette réunion, puis trier les commentaires pour afficher uniquement ceux qui correspondent à l'ID de réunion?

La réunion ne peut pas être ma racine agrégée parce que quand j'ai besoin d'une liste d'employés, je ne veux certainement pas avoir à passer par des réunions pour obtenir cela. Peut-être que chacun est une racine agrégée, mais les commentaires n'ont pas vraiment de sens en dehors d'un employé. Je cherche des idées pour mieux aborder ce scénario.

// Datebase tables 
Meeting 
Employee 
Comment - Contain EmployeeId and MeetingId 


public class Employee 
{ 
    public List<Comment> Comments { get; set; } 
} 

public class Meeting 
{ 
    public List<Employees> Employees { get; set; } 
} 

Merci d'avance pour l'aide.

+0

Quelle est la cardinalité entre vos entités? La réunion et l'employé peuvent être une racine aggrée ou simplement des entités simples. – lasseeskildsen

Répondre

1

employés et réunion sont vos racines globales, et vous devrez créer un dépôt pour vos racines globales.

Les commentaires peuvent être une propriété de Meeting. Je pense qu'il est inutile de récupérer les commentaires d'un employé, sans être lié à une réunion? Je ne pense pas que les Commentaires n'ont aucune signification quand vous ne connaissez pas son 'contexte' (== Réunion)? En faisant cela, votre modèle de classe sera quelque chose de très similaire à ce que propose Chris Marisic.

A côté de ces classes, vous pourriez avoir les référentiels suivants:

public class EmployeeRepository 
{ 
    public IList<Employee> GetAll() {} 
} 

public class MeetingRepository 
{ 
    public IList<Meeting> GetAll(){} 

    public IList<Meeting> GetMeetingsAttendedByEmployee(Employee emp){} 
} 
+0

Merci pour l'aide. Je voterais, mais je n'ai pas encore assez d'évaluation. – sinclairchase

1

Je probablement concevoir ce que

public class Comment 
{ 
    public string Message {get;set;} 
    public Employee {get;set;} 
    public Meeting {get;set;} 
} 

public class Employee 
{ 
    //public List<Comment> Comments { get; set; } <- why does this matter? 
} 

public class Meeting 
{ 
    //public List<Employee> Employees { get; set; } <- why does this matter? 
    public List<Comment> Comments { get; set; } 
} 
+0

Merci pour l'aide. Je voterais, mais je n'ai pas encore assez d'évaluation. – sinclairchase

+0

Bienvenue à SO .. –

Questions connexes