he estado construyendo una nueva aplicación que utiliza mi entendimiento actual del diseño de dominio impulsada. Hasta ahora, tengo un grupo de clases que representan entidades en mi dominio y un repositorio para recuperar desde/persistir en la base de datos.Domain Driven Design: Cómo recuperar las listas de datos complejos
El problema que estoy en es que en la interfaz de usuario Tengo una necesidad de mostrar algunas listas, donde los elementos de la lista no se asignan directamente a las entidades en mi dominio. Parte de la lista podría construirse haciendo una carga bastante profunda de determinadas entidades, pero otros datos se sintetizan esencialmente en el momento de la recuperación y no son parte de ninguna entidad. Permítanme darles un ejemplo que con suerte explicará el problema más claramente.
En mi dominio que tienen las evaluaciones (un conjunto de preguntas para responder) y respuestas (las respuestas que cada usuario ha proporcionado a la evaluación) a dichas evaluaciones. También tengo acciones. Cada acción representa una acción que se ha tomado con una respuesta (enviar, aprobar, rechazar, etc.). También tengo usuarios.
Una de las listas de datos que necesito mostrar incluiría respuestas y evaluaciones (que no se han respondido), luego cada línea incluiría información sobre el usuario que está trabajando actualmente con la respuesta (esto se determina en tiempo de recuperación al observar las acciones que se han tomado en una respuesta). Cada elemento de línea también incluiría cero o más elementos secundarios, que son acciones que se han llevado a cabo en la respuesta hasta el momento.
El problema es que a partir de ahora no tengo ninguna manera de representar a todo este conjunto de datos con mis entidades del dominio. Mi primera reacción sería simplemente recuperar una tabla de datos de la base de datos y omitir las entidades de mi dominio. Pero veo mucho valor al trabajar con objetos de dominio y tener las relaciones entre diferentes entidades cocidas en los objetos mismos. Así que mi próxima idea sería modificar las entidades de mi dominio para que sean compatibles con estas listas, pero me preocupa tanto que agregaría propiedades extrañas a mis entidades solo para respaldar estos escenarios de listado y que podría estar perjudicando el rendimiento haciendo básicamente cargas profundas de objetos cuando solo necesito esos datos en algunos lugares en mis aplicaciones.
Ok, ahora estoy leyendo sobre los servicios. Cuando dice que el servicio presentará los datos como una vista, ¿cuál es la vista? ¿Es una clase que se define solo para este propósito? ¿Está compuesto de entidades de dominio? –
Estoy usando view en el sentido MVC, es decir, algo cuyo trabajo es mostrarte cosas. El servicio agregará los datos relevantes reales, que luego se entregarán y se les pedirá que muestren (en su caso, esa es la "lista de datos" que menciona).Un servicio bien puede decidir envolver cosas en clases separadas (particularmente si muchas vistas usan los mismos datos) antes de entregarlo a las vistas, pero eso de ninguna manera es requerido. –