¿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 Sí 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:
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:
El código que realizaría el envío de mail según el tipo sería:
Como podéis observar no estamos realizando la DI, ahora añadiríamos Castle Windsor al proyecto y definimos sus dependencias:
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:
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.
.NET Architect and Cloud Lead | Soluciones Microsoft | SOGETI ESPAÑA
0 comments on ““Easy Factories” con Castle Windsor”