Помогите выбрать мои сводные корни DDD в предоставленном сценарии?

Я новичок в 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; } 
}

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


person sinclairchase    schedule 15.09.2011    source источник
comment
Какова кардинальность между вашими сущностями? И Meeting, и Employee могут быть совокупным корнем или просто объектами.   -  person lasseeskildsen    schedule 15.09.2011


Ответы (2)


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

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

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

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

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

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

    public IList<Meeting> GetMeetingsAttendedByEmployee( Employee emp ){}
}
person Frederik Gheysels    schedule 15.09.2011
comment
Спасибо за помощь. Я бы проголосовал, но у меня пока недостаточно высокий рейтинг. - person sinclairchase; 16.09.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; } 
}
person Chris Marisic    schedule 15.09.2011
comment
Спасибо за помощь. Я бы проголосовал, но у меня пока недостаточно высокий рейтинг. - person sinclairchase; 16.09.2011