Chcę poprosić o poradę, jak unikać pisania obiektów, które są zwykłymi kontenerami danych.DDD - Korzenie agregatów i tworzenie obiektów behawioralnych
Rozważmy następujący Agregat root:
public class Post : IAggregateRoot
{
List<Comment> Comments {get; set;}
}
Biorąc pod uwagę pinciples które regulują sposób zagregowany korzenie pracy, jest to ważne, aby zadzwonić powyższy kod takiego?
new Post().Comments.Add(New Comment("stuff"));
Czy jest to właściwa droga?
public class Post : IAggregateRoot
{
List<Comment> Comments {get; private set;}
public void AddComment(string message)
{
Comments.Add(new Comment(message));
}
}
i nazwał tak:
new Post().AddComment("stuff");
Czy to oznacza, co Eric Evan przez Zbiorczy Roots jest atomowy?
Jeśli tak jest, czy oznacza to, że jednostki nie mają żadnych publicznych ustawiaczy, ale zamiast tego mają metody wspomagające (AddThis, RemoveThat)? Czy w ten sposób tworzysz obiekty o bogatym zachowaniu?
Oba są prawdopodobnie błędne, chyba że masz uzasadniony powód, aby zgrupować razem 'Post' i' Komentarze'. Jakie niezmienniki biznesowe próbujesz chronić za pomocą dużego agregatu klastrów? Jeśli tak nie jest, to 'Comment' powinien być własnym agregowanym rootem. – plalx