Mostrando las entradas con la etiqueta dotnet. Mostrar todas las entradas
Mostrando las entradas con la etiqueta dotnet. Mostrar todas las entradas

Evolución de las versiones de JAVA y .NET a lo largo del tiempo

Timeline JAVA vs DOTNET
Suelo tomar entrevistas a desarrolladores, y una pregunta que solía hacer hace unos años, era que me cuenten las diferencias que había (por ejemplo) entre las versiones de JAVA 1.4 y 5.0. Era un buen ejercicio como para repasar algunas de las características más usadas y además me parecía interesante ver como los candidatos me "presentaban" esas características. Los programadores más experimentados solían poner una cara de "al fin agregaron esto o esto otro", y los que no venían muy bien o no les interesaba, dejaban pasar cosas importantes sin ni siquiera mencionarlas.
Me pasaba algo parecido con la plataforma .NET de Microsoft, no se porque, a mi me pareció siempre interesante ver que cosas nuevas van agregando a los lenguajes y herramientas de trabajo que usamos todos los días a lo largo del tiempo.
Pensando un poco en todo eso, me propuse hacer un repaso de las características más sobresalientes de las dos plataformas, pero para no hacer tan aburrida la cosa, armé un timeline:



Las imágenes son clickeables y agregué en cada release algunas notas acerca de las características más importantes de cada uno.
Opinan que los releases son lo suficientemente frecuentes? Que versión de cada plataforma les pareció más interesante?

Fuente: Wikipedia

Construyendo proyectos .NET usando Maven

Los que me conocen saben que por lo general tiendo a usar Maven para todo, pero si lo hago, es porque estoy convencido de que está bueno tener un marco para ciertas tareas repetitivas, y despues de haber visto tantos enfoques, creo que lo que propone maven es bastante razonable, para prácticamente cualquier lenguaje.
Pero la idea de este post, no es hablar de lo que ofrece Maven, sino de describir cuales son las alternativas que existen hoy en día para poder utilizarlo en proyectos de la plataforma de Microsoft.
Cabe aclarar de que en mi carrera como desarrollador, comencé utilizando la plataforma .NET, antes que JAVA, cuando todavía estaba apareciendo, allá por el año 2000 (12 años ya pasaron, dios!). Luego la vida me llevó al mundo de la tacita de café, en el cual descubrí otras formas de construir aplicaciones; y luego de unos años me volví a enfrentar nuevamente a la tarea de arquitecturar y de trabajar con aplicativos de este sabor.
Acostumbrado como estaba a sistemas alineados con los lineamientos propuestos por Maven, debo confesar que pasé por varios estados de ánimo al ver que me faltaban ciertas características que ya las consideraba como básicas en todo proyecto de desarrollo, como ser el layout común de estructura de directorios, manejo de dependencias, de versionado, de releases, etc.
Entonces comencé a buscar diferentes maneras "hacer andar maven" con .NET. Ahorrando los detalles de la búsqueda, llegué a dos alternativas diferentes: NPANDAY y maven-dotnet-plugin.

NPANDAY

El primero es un proyecto al cual seguí por algunos años, comenzó como un tímido port de los plugins core de Maven pero evolucionó mucho a lo largo del tiempo, y actualmente se encuentra como proyecto incubadora en el cúmulo de Apache, lo cual no es poco.
El enfoque de este proyecto es acercar maven a los desarrolladores .NET, facilitando la vida a los que están acostumbrados a trabajar la mayor parte del tiempo, con la IDE N°1 de la plataforma: Visual Studio.
Tal es así que el proyecto está dividido en dos grandes partes: por un lado el gran conjunto de plugins que permiten hacer las tareas rutinarias (compilar, empaquetar, construir, liberar, etc.) del proyecto utilizando Maven y por otro lado un plugin para Visual Studio que permite realizar ciertas tareas (ciertas modificaciones a los archivos pom.xml, agregar dependencias, construir, etc.) desde adentro de la IDE.
Al comenzar a investigarlo, una de las cosas que no me gustó demasiado, es que el proyecto en sí, se aleja mucho de la filosofía Maven, en el sentido de que para comenzar tenemos que seguir una Guía de Instalación. Nada más alejado del espíritu Maven, de ser un software que se autoinstala en cierta manera, ya que todas  las partes que lo componen se van descargando a medida que se va utilizando. En las primeras etapas del proyecto, incluso, uno tenía que descargarse todo el repositorio completo para poder utilizarlo, y nuevas versiones de NPANDAY obligaban a tener nuevas versiones del repositorio! ... muy Microsoft :)  ... por suerte hoy en día todo está subido al repositorio mundial.
Otro de los problemas a los cuales me enfrenté, fue al hecho de que el plugin para Visual Studio, solo funciona si lo tenemos funcionando en idioma Ingles (a tenerlo en cuenta, ya que lamentablemente este tema todavía no está solucionado).
Con respecto a la documentación, que si bien existe y es bastante, me da la sensación de estar bastante desorganizada, uno no sabe por donde comenzar, sobre todo si ya tenemos un proyecto funcionando y lo queremos hacer andar con Maven, no hay una guía simple de como hacerlo. Tampoco si queremos empezar desde cero, sobre todo lo que es relacionado al manejo de dependencias. Una buena página para los que quieran comenzar, es la que muestra el listado de plugins existentes.
La verdad que luego de intentar utilizarlo llegué a varios problemas (como por ejemplo la falta de plugins de reporting, y un no muy buen esquema de directorios para el testing unitario) por lo que lamentablemente tuve que seguir buscando a ver si no existía alguna alternativa.

Maven-dotnet-plugin

Por suerte existe, este proyecto apareció tímidamente en la n-ésima búsqueda en google, y terminó sirviendo totalmente para lo que estaba necesitando. El enfoque es totalmente diferente: está pensado para las personas que ya conocen Maven, y que lo necesitan para poder construir proyectos en .NET
En este caso olvídense de plugins de visual studio y de grandes características. Es un simple proyecto que lo que intenta resolver es justamente, poder construir proyectos .NET usando Maven.
Ya desde el sitio oficial uno ya se siente a gusto con el layout utilizado, obviamente generado automáticamente por los plugins de Maven. Este proyecto si bien tiene algunas limitaciones (ej. no pude hacer andar el manejo de dependencias, lo cual lamentablemente es bastante malo), pose algunas características muy interesantes, como por ejemplo muchos plugins de reporting que funcionan de lo más bien con servidores de construcción como Jenkins (lo más interesante es que tenemos el reporte de DRY gracias al plugin CPD), una idea inicial de empaquetado de aplicaciones WEB, un muy buen enfoque de estructura de directorio e integración con Galio para el unit testing, todo esto a la Maven-way, es decir, se descarga cuando se usa.

Conclusión

Se que probablemente lo que esperaban es un análisis más detallado de las características de cada uno, pero les puedo dejar como conclusión, despues de haber utilizado las dos herramientas lo siguiente: NPANDAY se ve como un proyecto más grande, con más plugins, más líneas de código y más esfuerzo de fondo. Lamentablemente todavía tiene muchos problemas que lo hacen prácticamente inusable, y para colmo de males, el proyecto parece haberse detenido en la versión 1.4.0-SNAPSHOT, una pena realmente, ojalá en algún momento lo retomen y lo continúen. Con respecto a maven-dotnet-plugin, lo recomiendo, si bien es mucho más humilde y más simple, funciona, hace lo que promete y bien, y nos abre las puertas a tener proyectos similares, ordenados, liberables y construíbles contínuamente.
Nos vemos en el próximo post.

Mapeos más dinámicos: Fluent NHibernate

Como muchos saben, la herramienta de ORM más conocida en el mundo JAVA, Hibernate, tiene su port, bastante actualizado por cierto, en el mundo .NET. Hace poco tuvimos que empezar un proyecto en esta plataforma, y un integrante del equipo, sugirió utilizar Fluent NHibernate. Se trata básicamente de una librería, con un enfoque “fluent” para construir los mappings de las entidades.
Al principio pensé que quizá no era una buena idea utilizar otra manera de hacer mapeos, ya que si teníamos algún problema quizá iba a ser un poco más difícil pedir soporte a otros equipos que tenían más experiencia, pero igualmente decidimos ir para adelante, por lo menos inicialmente, para probar que tan difícil era armarlos.
Por suerte para crear los primeros mapeos pudimos utilizar una herramienta generadora de código, que tenía soporte para crear los mapeos con Fluent. Igualmente fue necesario retocar lo generado, como siempre suele suceder con este tipo de herramientas.
Luego de un tiempo, al final creo que fue una buena idea, y se me ocurrió buscar si había algo parecido en el mundo JAVA, y lamentablemente no pude encontrar nada similar.
La idea básica de este framework es tener una clase con código fuente (en este caso c#) que define el mapeo. Ejemplo:

1:  public class CatMap : ClassMap<Cat>  
2:  {  
3:   public CatMap()  
4:   {  
5:    Id(x => x.Id);  
6:    Map(x => x.Name)  
7:     .Length(16)  
8:     .Not.Nullable();  
9:    Map(x => x.Sex);  
10:    References(x => x.Mate);  
11:    HasMany(x => x.Kittens);  
12:   }  
13:  }  

Lo bueno de este enfoque, comparado con archivos XML, es que muchas cosas se resuelven en tiempo de compilación. La otra ventaja, es que utilizando el Intellisense de la IDE (VisualStudio en este caso), podemos tener rápidamente un vistazo de los diferentes atributos de cada parte del mapeo que estamos construyendo, y contextualizados al campo que estamos mapeando.El startup time, además, es bastante bueno y rápido. 
En fin, esto demuestra que las buenas ideas, traspasan todas las plataformas, y así como .NET se vió beneficiado con el port de uno de los mejores frameworks de persistencia, JAVA podría verse beneficiado con otra forma interesante de construir mapeos si alguien se anima a hacer un port de esta librería en el mundo JAVA :)