2009-02-19 17 views
11

, powiedzmy, że mam główny katalog BlogPost. posiada listę <Comment>.
Jak powinien wyglądać podpis BlogPost AddComment? Czy można użyć:Jak dodać obiekt do kolekcji utrzymywanej przez agregat root

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

lub należy unikać tworzenia odniesień do dzieci root poza nim, i zrobić coś takiego:

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

Odpowiedz

5

Jeśli wierzysz w DDD, to perfekcyjnie znać o jakiejś encji poniżej zagregowanego katalogu głównego, o ile nie przechowujesz identyfikatora lub odniesienia do niego gdzieś poza agregatem.

Wybrałbym wersję blogPost.AddComment(new Comment(...)) -wersję.

4

Jeśli uważasz, że Komentarz jest skupiskiem BlogPost i nie ma sensu z tego zakresu, powinieneś używać drugiego przykładu.

Zagregowany katalog główny powinien kontrolować sposób tworzenia agregacji, aby ich konstruktory nie były widoczne poza zagregowanym katalogiem głównym.

Plus, Komentarz powinien być klasą podrzędną BlogPost, jeśli chcesz uzyskać prawdziwą relację AggregateRoot-Aggregate.

Powiązane problemy