Creo que necesita ver los límites agregados y las entidades como algo más que una simple jerarquía. Es probable que tengas un modelo más rico que eso.
La primera manera de saber si su agregado es correcto, es que puede ver cada una de las entidades que contiene y preguntar "¿Se debe acceder directamente a esto?" Si responde afirmativamente, es probable que esa entidad no forme parte del agregado.
Sin saber más acerca de su dominio, podría suponer que Store es realmente un agregado. Las ventas, por otro lado, son más complejas. Sí, las ventas se producen en una tienda, pero ¿necesita buscar una venta de forma independiente? Si los necesita fuera del alcance de simplemente trabajar con una tienda, las ventas probablemente estén fuera de ese agregado.
Imagino que tanto los Estilos como los Colores son inmutables y repetibles, por lo que probablemente sean Objetos de Valor en este caso. ¿Son las zonas exclusivas de una tienda, o varían?
Personalmente, encuentro valioso identificar todos los artículos del dominio en papel (o pizarra). Pasaré por una fase de descubrimiento con la parte interesada y simplemente los sacaré de allí. Luego, use estas palabras como líderes en la conversación, tratando de entender cómo se relacionan. Si entreviste a la parte interesada lo suficientemente bien, la descripción que brinda definirá la mayoría de lo que está buscando.
No es para vencer a un caballo muerto, pero el libro de Evans definitivamente vale la pena obtener/leer. Es un poco seco, pero muy perspicaz. Para un jumpstart rápido, puede leer el free book en InfoQ que es básicamente un resumen del libro de Evans.
Sí, también me gustaría acceder a las ventas directamente, probablemente con solo pasar el StoreId. ¿Supongo que crearía un SaleRepository en ese caso? Las zonas varían según la tienda.Cada tienda puede tener una cantidad x separada de zonas. ¿Crearía un ZoneRepository aquí también? Ordené el libro de Evans, sin embargo, comenzaría a investigar mi dominio. Por favor, avíseme si necesita cualquier otra información. Mientras más conocimiento pueda obtener, mejor entenderé DDD. Gracias de nuevo. – vikasde
Los límites agregados son probablemente lo más difícil en DDD, en mi opinión. Si está buscando tener que pasar un identificador de tienda en un repositorio de ventas propuesto, hay dos posibilidades que son inmediatas. En primer lugar, las Ventas podrían ser parte del agregado de la Tienda que usted mencionó. El otro podría ser que una Tienda podría ser parte de un agregado de Ventas. La única forma en que realmente serían agregados sería si necesita acceder de manera independiente y sin que requieran el conocimiento directo del otro. Tenga en cuenta que no le impide ... –
... mantener una referencia a otra raíz agregada. Por ejemplo, si determina que tanto Tienda como Ventas son raíces agregadas, nada impide que una Venta tenga una referencia a un Identificador de tienda, que luego puede usar para llamar al Depósito de Tienda para obtener la Tienda cuando la necesite. En cuanto a las Zonas, existe una relación definida con la Tienda. Esto refuerza el caso de que Store * es * una raíz agregada y Zone es una entidad (ya que no son necesariamente inmutables en el contexto que describió). Entonces, ahora mismo, estamos seguros de que Store es un agregado que contiene Zonas ... –