Pregunta

Digamos que tengo 2 entidades - Foo y Bar. Foo es una raíz agregado y contiene bar. Por lo que yo entiendo, que debe ser similar al siguiente:

public class Foo{
    private readonly Bar Bar;
}

Quiero ofrecer funcionalidad para los usuarios elegir Barras de Foos de una lista definida (y cambiarlo).

Si se supone que los depósitos para ser agregados para las raíces solamente significa que no habrá ningún repositorio de entidad bar.

Esto lleva a un problema - Bar no puede ser creada / modificada de forma independiente sin una referencia a Foo.

¿Quiere decir que bar se supone que tiene un repositorio a pesar de que no tiene sentido sin un Foo?

¿Fue útil?

Solución

Si desea seleccionar de una lista de bares en los que no están asociados con nombre, entonces esto no es una raíz agregado. Por ejemplo, no se puede obtener la lista de artículos de pedido sin su Orden, así que esto es sola raíz agregada (orden), pero se puede obtener la lista de los productos para asignar a los artículos de pedido, por lo que el producto no está en la raíz más agregada Orden.

Tenga en cuenta que, si bien de pedido es parte de la raíz agregada Orden, todavía se puede crear y actualizar de forma independiente. Sin embargo, no se puede conseguir sin referencia a pedido. Lo mismo para el bar, incluso si era parte de Foo, usted podría obtener cada uno (Foo.Bars) y trabajar con ella, o hacer Foo.AddBar (nueva barra ()). Pero si usted necesita para obtener Lista sin Foo, Bar no es parte de Foo agregado. Es una entidad separada.

Bueno, así es como veo DDD aquí, pero no estoy Eric Evans, por supuesto.

Otros consejos

Las razones para tener raíces agregados son:

  1. Proporcionan controlados y dirigidos acceso a entidades compuestas
  2. Se puede hacer cumplir normas para garantizar que todo el agregado es válida

Mi opinión: Si necesita seleccionar objetos Bar sin Foo, use un BarRepository.

Pero ... ¿Qué pasa si se actualiza un Bar, y se rompe una regla de validación para él es Foo padres? Si esto pudiera suceder, usted debe acceder a través de Bar es Foo padres.

Sin embargo, si necesita acceder a un montón de objetos Bar (por ejemplo, para un trabajo por lotes o informe), y sabe que se Foos no se rompen, adelante y accede a ellos a través de BarRepository.

Recuerde que las raíces agregados pueden estar compuestas de otras raíces agregadas. Usted puede descubrir que es una raíz Bar agregada en sí, que le da la justificación para una BarRepository:)

¿Está seguro de que Bar tiene por qué ser una entidad? ¿Tiene la necesidad de realizar un seguimiento y cambiarlo en el dominio? Si usted puede verlo como un objeto de valor, sugeriría que buscarla a un servicio y luego "conectar" el objeto de valor seleccionado para la entidad Foo. Por instantes a través de una lista desplegable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top