Je souhaite demander conseil sur la manière d'éviter d'écrire des objets qui sont de simples conteneurs de données.DDD - Agrégation de racines et création d'objets comportementaux
Tenir compte de la racine globale suivante:
public class Post : IAggregateRoot
{
List<Comment> Comments {get; set;}
}
Compte tenu des pinciples qui régissent le fonctionnement des racines ensemble, est-il valide pour appeler le code ci-dessus comme ça?
new Post().Comments.Add(New Comment("stuff"));
Ou est-ce la bonne façon?
public class Post : IAggregateRoot
{
List<Comment> Comments {get; private set;}
public void AddComment(string message)
{
Comments.Add(new Comment(message));
}
}
Et appelé comme ceci:
new Post().AddComment("stuff");
Est-ce que Eric Evan signifie par Aggregate Roots étant atomique?
Si tel est le cas, cela signifie-t-il que les Entités n'ont pas de setters publics, mais ont des méthodes de support (AddThis, RemoveThat)? Est-ce ainsi que vous créez des objets avec un comportement riche?
Les deux sont probablement faux, sauf si vous avez une raison valable de regrouper 'Post' et' Comments' ensemble. Quels sont les invariants professionnels que vous essayez de protéger avec votre agrégat de cluster volumineux? S'il n'y a pas alors 'Comment' devrait être sa propre racine agrégée. – plalx