Ich möchte um Ratschläge bitten, wie man vermeiden kann, Objekte zu schreiben, die reine Datencontainer sind.
Betrachten Sie die folgende Aggregatwurzel:
public class Post : IAggregateRoot
{
List<Comment> Comments {get; set;}
}
Ist es in Anbetracht der Grundsätze, die die Funktionsweise von Aggregatwurzeln bestimmen, zulässig, den obigen Code wie folgt aufzurufen?
new Post().Comments.Add(New Comment("stuff"));
Oder ist das der richtige Weg?
public class Post : IAggregateRoot
{
List<Comment> Comments {get; private set;}
public void AddComment(string message)
{
Comments.Add(new Comment(message));
}
}
Und zwar so:
new Post().AddComment("stuff");
Ist es das, was Eric Evan damit meint, dass Aggregatwurzeln atomar sind?
Wenn dies der Fall ist, bedeutet dies, dass Entitäten keine öffentlichen Setter haben, sondern stattdessen unterstützende Methoden (AddThis, RemoveThat)? Erzeugt man auf diese Weise Objekte mit vielfältigem Verhalten?