Hola!
Estos días estoy revisitando una app Winforms que requiere mucho cariño (Gracias Tori!). Al momento de empezar a mejorarla un poco con cosas como IoC en Winforms, me encuentro con la necesidad un Observer. Desde .Net Framework 4.0 tenemos una interfaz IObserver<T> muy útil, sin embargo la implementación requiere un poco de código y en pleno Agosto, seguro que ya alguien lo ha escrito.
En mi caso, me he encontrado con un paquete NuGet muy útil [SimpleBroker]. Veamos un ejemplo de utilización del mismo.
Pensemos en una vista principal que muestra los mensajes que se envían desde otras vistas. En un modelo muy feo de Forms, puede quedar algo similar al siguiente.
La clase que usamos para transmitir los mensajes es muy simple, solo 2 propiedades
Si pensamos en la vista que envía los mensajes, pues el evento Click(), crea un Message y hace un Publish() del mismo.
Pasando a la vista principal, lo que deberíamos hacer es lo siguiente
1. En el evento Load() de la vista, suscribirnos al envío de objetos de tipo Message.
2. La suscripción se hará en la operación OnNext(). Esta operación muestra línea a línea los mensajes recibidos
3. En el evento Closed(), cancelar la suscripción
4. En el Click() del botón lanzar la vista de envío de mensajes
El código final utilizando Bodies Members y String Interpolation queda bastante simple. Solo 25 líneas.
Nota: Gracias a C# 6 y sus nuevas características, el código queda muy simple 😉
Como siempre lo mejor es verlo en acción
Y si alguno quiere acceder al código el mismo está en https://github.com/elbruno/Blog/tree/master/WindowsFormsApplicationObserver
Saludos @ Madrid
/El Bruno
References
– El Bruno, C#6 Expression Bodied Members https://elbruno.com/2015/07/30/vs2015-c6-usando-expression-bodied-members-el-infierno-en-malas-manos/
– El Bruno, C#6 String Interpolation https://elbruno.com/2015/04/20/vs2015-string-interpolation-vs-string-format-o-como-arruinarle-el-dia-a-tu-equipo/
– MSDN IObserver<T> https://msdn.microsoft.com/en-us/library/dd989239(v=vs.110).aspx
– GitHub SimpleBroker https://github.com/iac249/SimpleBroker