2009-02-19 14 views
11

Digamos que tengo una raíz agregada de BlogPost. contiene una lista <Comment>.
¿cómo debería verse la firma BlogPost AddComment? ¿Está bien usar:cómo debo agregar un objeto en una colección mantenida por la raíz agregada

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

o debería evitar la creación de referencias a los niños de la raíz fuera de ella, y hacer algo como esto:

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

Respuesta

5

Si usted cree en DDD, que 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.

Iría por la blogPost.AddComment(new Comment(...)) -versión.

4

Si considera que el Comentario es un agregado de BlogPost y no tiene sentido fuera de ese ámbito, entonces debería usar el segundo ejemplo.

La raíz de agregado debe controlar cómo se crean las instancias de los agregados para que sus constructores no sean visibles fuera de la raíz de agregado.

Además, los comentarios deben ser una clase secundaria de BlogPost si desea una relación real de AggregateRoad-Aggregate.

Cuestiones relacionadas