domain-driven-design - quickly - domain driven design pdf
¿Cómo debo agregar un objeto en una colección mantenida por la raíz agregada? (2)
digamos que tengo una raíz agregada de BlogPost. contiene una Lista <Comment>
.
¿Cómo debería verse la firma de BlogPost AddComment? está bien usar:
public void AddComment(Comment comment) { Comments.Add(comment); }
o debería evitar crear referencias a los hijos de root fuera de él, y hacer algo como esto:
public void AddComment(string text, string email) { Comment comment = new Comment(text, email); Comments.Add(comment); }
Si considera que Comment es un agregado de BlogPost y no tiene sentido fuera de ese ámbito, entonces debería usar el segundo ejemplo.
La raíz agregada debería controlar cómo se crean las instancias de los agregados para que sus constructores no sean visibles fuera de la raíz agregada.
Además, Comment debería ser una clase secundaria de BlogPost si quieres una verdadera relación de AggregateRoad-Aggregate.
Si cree en DDD, está perfectamente bien saber acerca de alguna entidad debajo de la raíz agregada, siempre y cuando no almacene una ID o referencia en algún lugar fuera del agregado.
Me gustaría ir al blogPost.AddComment(new Comment(...))
-versión.