Mi base de datos es relativamente pequeña, 8 tablas, cada una con menos de 5 columnas. Yo uso EF. Creé una sola clase de repositorio, pero ahora creo que podría no ser la forma correcta de usarlo. ¿Debería tener una clase de repositorio separada para cada uno de mis controladores? Digamos que tengo Productos, Usuarios, Unicornios ¿estaría bien tener una sola clase de repositorio para operar con todos esos e instanciar en cada uno de esos controladores, o debería crear una clase de repositorio separada para cada uno de ellos?¿Clases de depósito individuales o múltiples?
Respuesta
Uno de los conceptos fundamentales de DDD es la raíz agregada: esta es la entidad de "nivel superior" a través de la cual se administran conjuntos completos de entidades relacionadas. Por ejemplo, en un escenario minorista, la 'Orden' sería una raíz agregada a través de la cual podría acceder al Pedido en sí, una lista de Artículos de pedido (es decir, Producto + Importe + modificadores como descuentos), BillingAddress, ShippingAddress y PaymentMethod. . Cada uno de ellos está estrechamente relacionado con el orden en sí, hasta el punto en que no tienen ningún motivo para existir fuera del alcance del pedido.
Cada raíz de agregado debe tener un repositorio que sea el propietario de la persistencia de todo el subgráfico de objetos debajo de la raíz. Por lo tanto, en el ejemplo anterior, NO querrá ni necesitará un repositorio para artículos de pedido que permita el acceso para pedir artículos de manera independiente; en su lugar, debe implementar un solo OrdersRepository que trate los pedidos y todos sus subcomponentes como una sola unidad.
Dependiendo de su modelo de dominio específico puede necesitar uno o más repositorios, pero ciertamente no uno por tipo de entidad. La pregunta clave que debe hacerse cuando se buscan raíces agregadas es "¿esta entidad tiene su propia identidad y ciclo de vida?" Las órdenes lo hacen, OrderItems no.
No creo que un repoistory por entidad sea una buena idea, más bien un repositorio por servicio si eso tiene algún sentido.
por ejemplo, yo no iría y haría un CategoriesRepository o CarsRepository si el enfoque principal de mi aplicación está en Users.
Think Domain-Driven Design, y con eso en mente, divide la estructura lógica de su proyecto no solo como clases, sino también como dominios, lo que significa que todas las operaciones tienen que ver con Product
se encuentran dentro del ProductsController
y consecuentemente dentro del ProductsRepository
, así que prefiero muchos repositorios, cada uno equipado con operaciones para tratar con algún aspecto de su proyecto.
No todos los aspectos pueden necesitar un repositorio, pero eso es lo que usted decide.
- 1. Controller individuales, múltiples (heredado) clases (carriles 3)
- 2. IPhone OpenGL ES vistas individuales o múltiples?
- 3. Índices múltiples e individuales
- 4. agrupaciones de hilos individuales o múltiples para el servidor Java?
- 5. Disposición de depósito Mercurial para múltiples ramas
- 6. ¿Qué es más rápido: múltiples INSERT individuales o un INSERT de múltiples filas?
- 7. Carpetas públicas múltiples, instalación de raíles individuales
- 8. Excepciones personalizadas: diferenciar a través de muchas subclases o clases individuales respaldadas con enum?
- 9. Conjunto de pruebas Junit 4 y clases de prueba individuales
- 10. Patrón de repositorio y múltiples entidades centrales u objetos comerciales relacionados: ¿un depósito o más?
- 11. Configuración de mercurial: ¿un depósito central o varios?
- 12. Múltiples clases en SVG
- 13. ¿Múltiples clases abstractas derivadas?
- 14. donde t: múltiples clases
- 15. Clases múltiples @Configuration de Spring
- 16. LINQ where() Tubos individuales o dobles/Ampersands
- 17. Múltiples hilos de host que inician kernels CUDA individuales
- 18. Organización de depósito para el proyecto Hadoop
- 19. leiningen con múltiples clases principales
- 20. Depósito cifrado de Subversion
- 21. Múltiples clases de pseudoclases de CSS
- 22. ¿Existe un depósito de código abierto de clases personalizadas para el Iphone?
- 23. Múltiples clases en un módulo de Python
- 24. jQuery hacer coincidir múltiples clases
- 25. Depósito vs Servicios de dominio
- 26. Depósito remoto claro de Git
- 27. limpiando un depósito Mercurial
- 28. Una especialización de plantilla para múltiples clases
- 29. La extensión de múltiples clases en coffeescript
- 30. múltiples declaraciones de clases importantes y precedencia
¡Excelente respuesta! Artículo útil que explica el concepto http://devlicio.us/blogs/casey/archive/2009/02/16/ddd-aggregates-and-aggregate-roots.aspx – GibboK