Me gustaría escribir una aplicación algo así como el comercio electrónico.
Y sabe que en aplicaciones similares los productos podrían tener diferentes propiedades y características. Para simular tal oportunidad, he creado las siguientes entidades de modelo de dominio:
Categoría : esto es algo así como "electrónica> computadoras", es decir, tipos de productos. Las categorías contienen una lista de propiedades (Lista <Propiedad>).
Propiedad : entidad independiente que contiene el nombre, unidades de medida, tipo de datos. Por ejemplo "nombre", "peso", "tamaño de pantalla". La misma propiedad puede tener diferentes productos.
Producto : solo contiene el nombre y la lista de valores relacionados con las propiedades. El valor es un objeto que contiene solo el campo de valor y el id de campo de la propiedad.
Originalmente decidí hacer la Categoría como agregado único en este esquema porque, por ejemplo, cuando agrego un nuevo producto, necesito conocer todos los datos relacionados con la categoría actual, incluidas las propiedades relacionadas con la categoría actual ( category.AddNewProduct (product) ). Pero, ¿qué debo hacer cuando solo necesito agregar una nueva propiedad que no pertenece a ninguna categoría? Por ejemplo, no puedo hacer esta categoría . Agregar propiedad nueva (propiedad) porque dice claramente que agregamos la propiedad a una categoría específica.
Ok, el siguiente paso decidí separar la propiedad en un agregado separado, pero luego será una lista con entidades simples.
Por supuesto, puedo crear algo como PropertyAggregate para mantener dentro de la lista de propiedades y reglas de negocios, pero cuando agrego un producto, necesito tener dentro de la categoría la lista completa de propiedades que pertenecen a esta categoría para verificar las invariantes. Pero también soy consciente de que mantener los enlaces dentro del agregado en otros agregados es una mala práctica.
¿Cuáles son las opciones para diseñar este caso de negocios?