Geeks•ms
Todo lo que los geeks de Windows y .Net tienen que contar
Sigue a Plain Concepts en Twitter
VSX, RAD & Cloud

 

Aquí comienzo mi camino en este blog, agradeciendo en primer lugar a Plain Concepts y en especial a Rodrigo Corral, por esta oportunidad de expresión en esta gran plataforma de referencia para buena parte del mundo .Net en castellano.

 

Sobre qué intentarán aportar mis artículos ya adelanta algo el título de éste. En primer lugar, intentaré dar una visión un poco más cercana de cómo aprovechar las múltiples posibilidades que nos brinda Visual Studio 2010 para ser extendido con nuestros "plugins". La irrupción de los paquetes VSIX, la adopción de MEF y la explosión de Visual Studio Gallery como repositorio de extensiones, nos demuestran la fuerte apuesta de Microsoft, ahora más que nunca, por  lograr que Visual Studio sea realmente una plataforma de desarrollo fácilmente extensible.

 

Esta primera línea temática navegará sobre otra, un poco más profunda y que me han inculcado desde que comencé con esto profesionalmente, y es la de tendencias o metodologías como Software Factories, desarrollo dirigido por modelos, líneas de productos, generación de código, etc. En definitiva, exprimir hasta la última gota de productividad de nuestras herramientas de desarrollo.

 

Soy consciente de que hay mucha corriente en contra. Mucha gente que prefiere los matices de Software Craftmanship y similares, y que reusa de cualquier cosa que le impida escribir hasta el último punto y coma de su código. No obstante, mis ideas no son caprichosas. No son fruto de la teoría, sino del pragmatismo más extremo. Vivimos de servicios de software en Andalucía, sin inversores, sin padrinos políticos ni aliados poderosos. Es un escenario maravilloso para la evolución, y ella es la que nos ha puesto estas ideas en nuestras cabezas. Claro que nos encantaría poder escribir código como el que pinta un cuadro, y disfrutar una a una de cada una de nuestras obras y cuidar cada uno de sus detalles. Pero no podemos. Simplemente es fruto de la pura supervivencia.

 

Actualmente trabajo en un proyecto que me ilusiona bastante y del que creo que podré comentar cosas interesantes relacionadas con las líneas que comento. Se trata del desarrollo de una herramienta en la onda de Data Dynamics y WCF RIA Services pero que busca rellenar el hueco de semántica, flexibilidad y extensibilidad que éstas no cubren. El por qué no poder usar los conceptos de alta productividad de estas herramientas en proyectos que requieren de bases arquitectónicas mucho más sólidas fue lo que nos empujó a materializar esta iniciativa.

 

A grandes rasgos, intentamos converger varias tecnologías Microsoft como plantillas de proyecto para definir arquitecturas, plantillas T4 para definir artefactos, y DSL Tools para definir modelos, para dar lugar a una plataforma de desarrollo dirigido por modelos siguiendo las líneas que marcaron Greenfield y Short en su libro Software Factories (http://www.softwarefactories.com/TheBook.html). Recientemente, y como prueba de fuego, usamos la arquitectura que están desarrollando César de la Torre y Unai Zorrilla, entre otros, (http://microsoftnlayerapp.codeplex.com/) basada en la que propone Eric Evans en su libro “Domain Driven Design” (http://domaindrivendesign.org/books). Si queréis ver algún vídeo de los resultados, sólo tenéis que pedírmelo.

 

Entiendo que quizás pueda chocar un poco la dualidad de DDD’s: una arquitectura surgida de Domain Driven Design con este tipo de herramientas más afines al Data Driven Development. Sin embargo, encontramos varios escenarios en los que la aleación de matices de ambos paradigmas puede ser satisfactoria.

 

Detectamos, por ejemplo, clientes en estados de baja madurez tecnológica que, pese a que concentran procesos de negocio relativamente complejos o cambiantes, no tienen capacidad financiera, o consideran demasiado costoso y prescindible emprender una solución acorde a sus necesidades. Una solución que conllevaría, si somos partidarios de Eric Evans, un proceso de desarrollo inmerso en un lenguaje ubicuo, que resultara en una capa de dominio que plasme fielmente los procesos del negocio. Todo ello sobre una arquitectura que permita que el negocio evolucione sin interferencias tecnológicas de ningún tipo, entre otras cosas. Obviamente todo esto tiene un coste.

 

Normalmente el contraste de intereses entre ambas partes hace inviable el proyecto. Una solución intermedia que se puede aportar es usar herramientas de alta productividad  tipo RAD (como las que antes comenté) para crear un producto intermedio, no demasiado ambicioso, que pueda despertar el interés tecnológico del cliente, y con el que pueda medir fielmente el aumento de productividad que le supone con respecto a, por ejemplo, las herramientas de ofimática. Sin embargo, es evidente que hay un lado oscuro en este tipo de soluciones.

 

El bajo grado de madurez de este tipo de clientes implica procesos de negocio muy cambiantes. A su vez, la base arquitectónica del producto desarrollado con herramientas RAD no es adecuada para entornos con alto nivel de complejidad  y/o cambio. Esto hace que, si bien solemos conseguir despertar el interés en el cliente por desarrollarse tecnológicamente, nos volvemos a enfrentar a un conflicto de intereses. Conflicto que viene dado porque el cliente no suele asumir los altos costes de una refactorización completa del producto, desde el nivel arquitectónico, lo cual resulta imprescindible para mantener el evolutivo junto al aumento de interés por seguir perfeccionándolo.

 

Es aquí donde creo que una herramienta que ponga unas bases arquitectónicas sólidas, con los parámetros de alta productividad de las herramientas RAD puede ser óptima. No obstante, hay otros escenarios que se encuentran mucho más exhaustivamente estudiados en los que también pueden ser eficientes estas herramientas, como líneas de productos en dominios verticales, prototipado real rápido, normalización de desarrollos en factorías, etc.

 

Por último, siguiendo una línea metodológica parecida que además aprovecha las nuevas oportunidades que nos ofrece el Cloud Computing, me encuentro enfrascado en otro proyecto bastante innovador, sobre el que espero escribir algún artículo. Se trata de usar la plataforma Windows Azure para aprovechar su poder de paralelización en la generación de código. De este modo se pueden construir servidores de generación de modo que el cliente modele en local y use Azure para generar los artefactos correspondientes, totalmente en paralelo. El proyecto aún está en fases tempranas de desarrollo, sin embargo, ya hemos encontrado bastantes temas interesantes que iré relatando a medida que vaya teniendo tiempo.

 

Y poco más, ya sólo queda ponerse manos a la obra. Al lío!!

 

 


Enviado 23/5/2010 23:39 por Rubén Jiménez Marrufo
Archivado en: ,
Comparte este post:

Comentarios

preguntoncojonero escrito re: VSX, RAD & Cloud
en 25/5/2010 10:24

adelante señor !!! gracias

preguntoncojonero escrito re: VSX, RAD & Cloud
en 25/5/2010 10:25

adelante señor !!! gracias

preguntoncojonero escrito re: VSX, RAD & Cloud
en 26/5/2010 16:10

Si queréis ver algún vídeo de los resultados, sólo tenéis que pedírmelo.

Se pueden ver esos vídeos ? Gracias !!!

Joel Arrechea escrito re: VSX, RAD & Cloud
en 26/5/2010 17:08

Rubén me gustaria ver también esos videos. Te deseo mucha suerte en los proyectos que has emprendido.

Rubén Jiménez Marrufo escrito re: VSX, RAD & Cloud
en 26/5/2010 17:38

Por supuesto, son 6 vídeos. En los cinco primeros se genera una aplicación desde 0, con la arquitectura de DDD ya cargada en la herramienta. En el sexto se muestra como crear una arquitectura para posteriormente usarla con la herramienta. Aquí os dejo el enlace:

www.radarc.es/.../RadarcBEADDDNLayerDeployandModules.aspx

Hace unas horas, César de la Torre nos ha ofrecido colgar los vídeos en la página de la arquitectura en MSDN:

msdn.microsoft.com/.../default.aspx

así como enlazar la información de la herramienta desde el proyecto de Codeplex. Estamos muy contentos :D

Sigue a Plain Concepts en Facebook