Llevo casi dos años leyendo sobre el diseño impulsado por dominios y he estado introduciendo con cautela algunos conceptos en mi trabajo diario o al menos haciendo planes sobre cómo se pueden hacer las cosas que hago regularmente dentro de un diseño impulsado por dominios.
Una conclusión a la que he empezado a llegar especialmente en respuesta a la lectura más sobre el abastecimiento de eventos y la segregación de responsabilidad de consulta de comandos (CQRS) de que quizás los objetos de dominio están destinados a ser utilizados solo con fines de escritura. Para ser más claro, parece que lo que la gente sugiere sutilmente en gran parte de la documentación que he leído es que los objetos de dominio son responsables de realizar operaciones / cálculos centrados en el dominio, validación, y luego están allí principalmente para proporcionar un camino hacia la persistencia a través de La infraestructura proporcionada dentro de una implementación de repositorio. Aunque me gusta el hecho de que esto puede simplificar enormemente el modelo de dominio, ya que elimina la responsabilidad de exponer el estado.
Si es correcto que los objetos de dominio se usen principalmente como objetos de solo escritura, entonces eso plantea algunas preguntas para mí que espero que alguien pueda responder.
- ¿Cómo se realizan pruebas unitarias en un objeto que tiene setters, o métodos que modifican el estado de un objeto pero que no proporcionan una interfaz pública externa para leer el estado, como los captadores de propiedades en C #? ¿Está bien exponer el estado únicamente con el fin de hacer que ese objeto sea comprobable?
- ¿Cómo se le muestra a un usuario los resultados de los cálculos u operaciones realizados en el dominio sin tener que persistirlos y luego extraer los resultados del almacén persistente fuera del contexto del dominio? ¿Está bien exponer el estado únicamente con el fin de mostrar resultados?
¿Es la regla general que los únicos captadores de propiedades (obtener accesores) deben ser los que también se pueden escribir en el dominio? O dicho de otra manera, ¿las propiedades de solo lectura deberían ser lo único que se debe evitar, ya que solo están allí para fines de lectura y, por lo tanto, no juegan un papel necesario en el modelo de dominio real?
Material relacionado:
No. CQRS puede usarse junto con DDD.
fuente
Las pruebas de unidad del modelo de dominio deben verificar que para cada comando ejecutado se generen los eventos de dominio correctos. Los comandos de su dominio y los eventos capturados pueden ser interrogados por estado.
También puede anular
ToString()
los comandos y eventos de su dominio para proporcionar informes de estado automáticos y legibles por humanos.Para responder a su segunda pregunta, para mostrar los resultados de los comandos, debe organizar los eventos de dominio para que se 'publiquen' en su modelo de lectura.
fuente