query - CQRS: ¿está permitido llamar al lado de lectura desde el lado de escritura?
domain driven design (2)
CQRS Journey no debe verse como un manual. Esta es solo una historia de un equipo que se abre camino hacia CQRS y tiene todas las limitaciones de usar solo la pila de Microsoft. Por sí mismo, no debe usar su modelo de lectura en los controladores de comandos o la lógica de dominio. Pero puede consultar su modelo de lectura desde el cliente para obtener los datos que necesita para su comando y validar el comando.
Dado que obtuve algunos votos en contra de esta respuesta, debo señalar que lo que escribí es la práctica establecida dentro del patrón. Ningún lado de lectura accede al lado de escritura, el lado de escritura no obtiene datos del lado de lectura.
Sin embargo, la definición de "cliente" podría ser un tema de discusión. Por ejemplo, no confío en que una aplicación de navegador JS con orientación pública sea un "cliente" adecuado. En su lugar, usaría mi capa REST API para ser el "cliente" en CQRS y la aplicación web sería solo una capa de IU para este cliente. En este caso, el procesamiento de llamadas del servicio REST API será un lector del lado de lectura legítimo, ya que debe validar todo lo que se envía a la capa UI para evitar falsificaciones y validar algunas reglas de negocios. Cuando se realiza este trabajo, el comando se forma y se envía al lado de escritura. Las validaciones y todo lo demás es síncrono y el manejo de comandos es asíncrono.
ACTUALIZACIÓN: A la luz de algunos desacuerdos a continuación, me gustaría señalar el artículo de Udi de 2009 que habla sobre CQRS en general, los comandos y la validación en particular.
Empecé leyendo sobre CQRS y estoy un poco confundido.
¿Se permite llamar al lado de lectura dentro del lado de escritura para obtener información adicional?
http://cqrs.nu/Faq/command-handlers aquí dicen que no está permitido, pero en el código de viaje cqrs descubrí que llaman a un servicio ''IPricingService'' que internamente usa una clase de servicio DAO.
Entonces, ¿qué debo hacer para obtener información adicional dentro de mi raíz de agregación?
Las preguntas frecuentes de CQRS ( http://cqrs.nu/Faq ) sugieren:
"¿Cómo puedo comunicarme entre contextos limitados?
Exclusivamente en términos de su API pública. Esto podría implicar la suscripción a eventos que provienen de otro contexto acotado. O un contexto acotado podría actuar como un cliente regular de otro, enviando comandos y consultas ".
Entonces, aunque dentro de un BC no es posible utilizar el lado de lectura desde el lado de escritura y viceversa, otro contexto o servicio limitado podría hacerlo. En esencia, esto sería actuar como un humano usando la interfaz de usuario.