CQRS: ¿Cómo se recuperan la información sobre un comando ejecutado?

StackOverflow https://stackoverflow.com/questions/8307267

  •  25-10-2019
  •  | 
  •  

Pregunta

En la mayoría de las interfaces de comando que he visto, generalmente hay un método de "ejecutar" que toma una entrada de comando y devuelve vacío o alguna estructura genérica que indique si el comando se ejecuta con éxito o no (estamos usando este último). Ahora, nunca antes había pensado en esto, pero de repente tuvimos la necesidad de saber más detalles sobre el resultado del comando que lo que puede exponer genéricamente.

Considere el siguiente ejemplo:

Tiene un equipo y está creando una pantalla donde puede agregar miembros a su equipo. Los miembros del equipo se muestran en una cuadrícula debajo del "Agregar nuevo miembro" -Sfuff. Ahora, cuando presione "Agregue nuevo miembro", desea ejecutar algo de jQuery/Roundohuse/lo que sea y agregar el nuevo miembro a la lista de miembros del equipo. Hasta ahora no hay problemas, pero: también desea incluir algunos datos de identificación en un campo oculto para cada miembro y estos datos de identificación provienen del servidor.

Entonces, el problema es: ¿cómo puedo obtener esos datos de identificación del servidor? El comando "AddnewteamMember" que estoy presionando a través del método "ExecutEcommand" no me da nada útil, y si agrego un nuevo método de consulta al servicio que dice algo como: "getLastaddedTeamMember", entonces podría obtener la última entrada agregado por otra persona (al menos si se trata de datos que son agregados agresivamente por diferentes usuarios). En algunas situaciones, tiene un identificador único natural generado en el lado del cliente que podemos usar, pero para los miembros del equipo no lo hicimos.

¿Fue útil?

Solución

Dado que no tiene más remedio que actualizar un widget en la página cuando se completa otro comando, veo dos opciones para usted:

  1. Dispare el comando, muestre algo localmente que indique que se envía y luego espere hasta que reciba una notificación del servidor que la lista de miembros del equipo ha cambiado. Actualice el widget para reflejar eso.

  2. Agregue una ID de correlación a su comando cuando lo envíe y agregue el miembro del equipo provisionalmente localmente a la lista. Cuando obtenga una confirmación del servidor que ocurrió una actualización de miembro del equipo debido a su ID de correlación, actualice sus datos locales.

Sugeriría el primer enfoque, donde el "indicador provisional" podría estar lanzando una versión marcada de la indicación normal en su lugar; Luego, cuando finalmente obtenga una actualización, debe tener los datos que necesita.

Dado que fue con CQRS para resolver este problema, supongo que tiene actualizaciones frecuentes al contenido de esos widgets que ya están ocurriendo en segundo plano, por lo que presumiblemente he resumido el problema de "actualización de fondo".

Si no, le sugiero que abandone los CQR como una solución mala, demasiado complicada, en su espacio de problemas o resuelva el problema de actualización de fondo primero.

Otros consejos

Si desea agregar un miembro del equipo existente, debe consultar el lado de lectura de su aplicación para estos datos. Si necesita agregar un nuevo miembro del equipo, debe considerar si es necesario mostrar al usuario en la cuadrícula a continuación. ¿Puede esperar hasta que el miembro del equipo esté en su lugar en el lado de la lectura? También puede consultar un servicio en el lado del servidor para obtener una ID única (puede devolver un GUID). Luego agrega el miembro del equipo a la cuadrícula y, por supuesto, envía el comando al servidor. Pero, si es posible, intente diseñar la aplicación de una manera que no tenga que mostrar al miembro del equipo a la vez. También es posible darle al usuario un mensaje que diga algo como esto: "Miembro del equipo agregó, esperando la respuesta del servidor". Luego use Ajax para consultar el lado de lectura para los nuevos miembros del equipo. Cuando aparezca en el lado de la lectura, muéstralo en la cuadrícula. Es posible que tenga que tratar con los miembros del equipo agregados por otros usuarios, pero ¿importa? CQRS le brinda una excelente manera de colaborar con otros usuarios, por lo que tal vez debería aprovechar eso. Como yo lo veo; CQRS te obliga a pensar diferente, y eso puede no ser algo malo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top