#VS2015 – Observer Pattern en modo MUY SIMPLE (como nos gusta)

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

2015 08 12 Observer

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

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.