Pregunta

Me abrí camino a través de la guía de Prism y creo que entendí la mayoría de sus vehículos de comunicación.

El comando es muy sencillo, por lo que está claro que DelegateCommand se usará solo para conectar la Vista con su Modelo.

Es algo menos claro cuando se trata de comunicación entre módulos, específicamente cuándo usar EventAggregation sobre comandos compuestos.

El efecto práctico es el mismo, p.e.

  • Publicas un evento -> todos los suscriptores reciben un aviso y ejecutan el código en respuesta
  • Ejecuta un comando compuesto -> todos los comandos registrados se ejecutan y con ellos su código adjunto

Ambos funcionan en la línea de "disparar y olvidar", es decir, no les importan las respuestas de sus suscriptores después de activar el evento/ejecutar los comandos.

Tengo problemas para ver una diferencia práctica en el uso, aunque entiendo que la implementación de ambos (bajo el capó) es muy diferente.

Entonces, ¿deberíamos pensar en lo que realmente significa: evento?¿Es entonces cuando sucede algo (ocurre un evento)?¿Algo que el usuario no solicitó directamente como una "solicitud web completada"?

¿Y el mando?¿Eso significa que un usuario hizo clic en algo y, por lo tanto, emitió un comando a nuestra aplicación, solicitando un servicio directamente?

¿Es asi?¿O existen otras formas de determinar cuándo utilizar uno de estos vehículos de comunicación sobre el otro?La guía, aunque es una de las mejores documentaciones que leí, no ofrece ninguna explicación específica.

Así que espero que las personas involucradas en Prism puedan ayudar a arrojar algo de luz sobre esto.

¿Fue útil?

Solución

Hay dos diferencias principales entre estos dos.

  1. CanExecute para los comandos . Un comando Se puede decir si es o no es válida para la ejecución llamando Command.RaiseCanExecuteChanged () y teniendo su delegado CanExecute falso retorno. Si se tiene en cuenta la caso de un "Guardar todo" CompositeCommand componer varias "Guardar" comandos, pero un de la comandos diciendo que no puede ejecutar, el botón Guardar todo lo desactivar automáticamente (agradable!).
  2. EventAggregator es una mensajería patrón y comandos son una patrón de mando . A pesar de que CompositeCommands no están explícitamente un patrón de interfaz de usuario, por lo que es implícitamente (En general, que están conectados a una acción de entrada, como un botón de clic). EventAggregator no es de esta manera - cualquier parte de la solicitud aumentar efectivamente un EventAggregator procesos en segundo plano,: evento ViewModels, etc. Es una avenida negociado para la mensajería a través de su aplicación con el apoyo para cosas como el filtrado, ejecución del hilo de fondo, etc.

Espero que esto ayuda a explicar las diferencias. Es más difícil decir cuándo utilizar cada uno, pero en general yo uso la regla de oro que si se trata de la interacción del usuario que genera el evento, utilice un comando para cualquier otra cosa, utilice EventAggregator .

Espero que esto ayude.

Otros consejos

Además, hay una diferencia más importante: Con la implementación actual, un evento de la EventAggregator es asíncrono , mientras que el CompositeCommand es sincrónica

.

Si desea implementar algo así como "notificar a ese evento ocurrió X; hacer algo que se basa en los controladores de eventos para el evento X haberse ejecutado", que o bien tienen que hacer algo como Application.DoEvents () o utilizar CompositeCommands <. / p>

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