Подтвердить что ты не робот

Как добавить объект в коллекцию, поддерживаемую агрегированным корнем

говорит, что у меня есть агрегированный корень BlogPost. он содержит список <Comment>.
как должна выглядеть подпись BlogPost AddComment? это нормально использовать:

public void AddComment(Comment comment)
{
    Comments.Add(comment);
}

или я должен избегать создания ссылок на корневые дети вне его и делать что-то вроде этого:

public void AddComment(string text, string email)
{
    Comment comment = new Comment(text, email);
    Comments.Add(comment);
}
4b9b3361

Ответ 1

Если вы верите в DDD, прекрасно знать о какой-либо сущности под общим корнем, если вы не храните идентификатор или ссылку на него где-то за пределами агрегата.

Я бы пошел на blogPost.AddComment(new Comment(...)) -версию.

Ответ 2

Если вы считаете, что Comment является совокупностью BlogPost и не иметь смысла из этой области, тогда вы должны использовать второй пример.

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

Плюс, комментарий должен быть дочерним классом BlogPost, если вы хотите получить истинное отношение AggregateRoot-Aggregate.