Помогите выбрать мои агрегатные корни DDD в рамках предоставленного scenerio? - PullRequest
2 голосов
/ 15 сентября 2011

Я довольно новичок в DDD и прочитал несколько статей о концепции, так что извините, если мне не хватает знаний. Мне любопытно, как этот пример должен быть смоделирован с совокупными корнями.

Основа: есть сотрудник, собрание и комментарии. Каждый Сотрудник может посетить Совещание, где он может сделать Комментарии. Комментарии отслеживаются в соответствии с Сотрудником и Совещанием. Каждое собрание и сотрудник имеют уникальные идентификаторы.

Если бы я хотел отобразить все комментарии со встречи, независимо от сотрудника, должен ли я сначала получить всех сотрудников, принадлежащих к этой встрече, а затем отсортировать комментарии, чтобы показать только те, которые соответствуют идентификатору встречи?

Совещание не может быть моим общим корнем, потому что когда мне нужен список сотрудников, я, конечно, не хочу проходить собрания, чтобы получить это. Может быть, каждый из них является совокупным корнем, но комментарии не имеют смысла вне Сотрудника. Я ищу идеи о том, как лучше подходить к этому сценарию.

// 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; } 
}

Заранее спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Сотрудник и собрание - это ваши общие корни, и вам придется создать хранилище для ваших общих корней.

Комментарии могут быть собственностью Meeting. Я думаю, что бесполезно получать комментарии от Сотрудника, не будучи связанным с Совещанием? Я не думаю, что комментарии не имеют никакого смысла, если вы не знаете их «контекст» (== Встреча)?

Таким образом, модель вашего класса будет очень похожа на то, что предлагает Крис Марисик.

Рядом с этими классами могут находиться следующие репозитории:

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

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

    public IList<Meeting> GetMeetingsAttendedByEmployee( Employee emp ){}
}
1 голос
/ 15 сентября 2011

Я бы, наверное, назвал это

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; } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...