“Easy Factories” con Castle Windsor

castle-project

¿Quién no ha implementado una Factory alguna vez en un proyecto? ¿Quién no ha utilizado o utiliza inyección de dependencias (DI) en su proyecto?

Si la contestación a estas dos preguntas es afirmativa, ¿os gustaría poder utilizar vuestro framework de DI como Factory y no tener que implementar el patrón? Si vuestra respuesta es vais a ver cómo lo podéis realizar.

Desde hace años, utilizo Castle Windsor como motor de DI en mis proyectos. Entre muchas razones lo que más me gusta de Castle Windsor es que no es solo un DI sino que es un IoC (Inversion of Control), lo que me da muchas más opciones y herramientas que un simple DI.

En este post no entraré a explicar la diferencia entre DI y IoC, pero en un post anterior de mi compañero Eduard Moret explica esta diferencia, podéis consultarlo aquí.

Una vez situados en contexto, el objetivo de este post es ver cómo podemos usar Castle Windsor como Factory.

Supongamos que tenemos un proceso de envío de mails y según el tipo de mail que quiero enviar me instanciará una clase u otra.  Tendríamos el siguiente diagrama de clases:

diagrama-de-clases

Ante esta situación lo que haríamos es implementar el patrón Factory que me devolvería la instancia correcta según el tipo de email que quisiera realizar. El código sería algo parecido a:

factory

El código que realizaría el envío de mail según el tipo sería:

factory2

Como podéis observar no estamos realizando la DI, ahora añadiríamos Castle Windsor al proyecto y definimos sus dependencias:

windor

Lo que estamos haciendo es definir cuál es la implementación de la interface ISendEmail según un nombre, de esta forma cuando resolvamos la dependencia, según el nombre que le pasemos, nos devolverá la implementación correcta, es decir estamos configurando la factory.

Cómo quedaría nuestro código:

factory3

Con esta aproximación nos ahorramos tener que implementar el patrón y aprovechamos la funcionalidad out of the box que nos ofrece Castle Windsor en este caso.

Como podéis observar conocer bien los frameworks que estamos utilizando nos puede ahorrar mucho tiempo de desarrollo, y saberlos utilizar bien nos permite realizar un código más mantenible, legible y limpio.

Conoce cómo desde SOGETI te ayudamos al desarrollo de poyectos IT adaptados a tus necesidades.


Robert Bermejo

.NET Architect and Cloud Lead | Soluciones Microsoft | SOGETI ESPAÑA

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s