6.12.2009

Versionando Aplicaciones en .NET - Introducción – Parte 1

En muchas ocasiones, me encuentro en diferentes empresas con la finalidad de ayudar a desarrollar una nueva aplicación basado en una versión anterior de la misma utilizando arquitecturas, frameworks y componentes que ayuden a mejorar la velocidad de desarrollo, faciliten el mantenimiento de la misma, y permitan adoptar nuevas funcionalidades no disponibles en la versión anterior. En medio de estos procesos, en la mayoría de los casos, y sobre todo en las empresas que venden su software a terceros, me encuentro con un problema que parece ser muy común:

Como manejar el versionamiento de mi aplicación, si tengo varios clientes y cada cliente tiene formas diferentes de llevar a cabo algunos de sus procesos

Esto sin duda alguna es todo un reto, ya que implica que vamos a tener una sola versión de la aplicación con comportamientos diferentes.

En el pasado – y aún ahora – muchas empresas lo que hacen es crear una copia del proyecto para cada cliente, lo que conlleva a que no se puedan lanzar nuevas versiones del producto, o al menos del corazón de la funcionalidad del producto, por que la empresa terminará teniendo una versión para cada cliente, por lo tanto terminará teniendo tantos productos como clientes tiene. En otras ocasiones, sobre la misma aplicación se empieza a agregar la funcionalidad variante, dividida por estructuras if – else o por algún otro mecanismo que permita esta separación del código; esto por supuesto termina complicando los escenarios de desarrolla en una forma desproporcionada, porque algo que resulta ser un pequeño cambio para un cliente quiebra un montón de funcionalidad en otro cliente.

La pregunta obvia que surge es entonces: ¿Cómo puedo hacer que mis sistemas se desarrollen con el versionamiento para las mismas de una forma más manejable y más simple? La respuesta también es simple: IoC - inversion of control container. Un IoC es un patrón que en conjunto con el Dependency Injection ayuda a ensamblar componentes desde diferentes proyectos en  una aplicación funcional. El patrón en sí se enfoca en como crear instancias de las clases y componentes que necesitamos en tiempo de ejecución sin tener que recompilar y reinstalar la aplicación de nuevo para instanciar otra clase diferente a la definida en la compilación inicial. Información más detallada de el patrón en sí se puede encontrar en la página de Martin Flower.

Existen muchos IoC disponibles en el mercado para su uso libre en la plataforma .NET, y en esta serie de post voy a dedicarme a mostrar como funcionan algunos de estos componentes – los que a mi gusto son los más conocidos. Los IoC que estaré analizando son CastleWindsor, Autofac y Unity Application Block.

En el siguiente post estaré analizando CastleWindsor.

Technorati Tags: ,

4 comentarios:

Gerson dijo...

Excelente noticia, he buscado noticias sobre las bondades de estos sabores de IoC, esperare tus nuevos post,

Saludos.

Diego Rojas dijo...

Gracias Gerson, espero esta semana estar publicando al menos el análisis sobre CastleWindsor

Saludos

Ale Afonso dijo...

Muchas veces me había preguntado cómo solucionar el tema del versionamiento. Gracias por el post.

También te cuento que en estos días estuve investigando los App Blocks del Enterprise Library y cuando llegué al Unity no entendí nada jejeje.

Con entusiasmo, espero tus siguientes posts.

Gracias Diego.

Diego Rojas dijo...

Gracias Ale Alfonso por tu comentario.
Te dejo el link del nuevo post relacionado con el versionamiento utilizando CastleWindsor
Versionando con CastleWindsor