Disclaimer: This is a personal web page. Contents written here do not represent the position of my employer.

Wednesday, August 17, 2005

 

Evolución de mi arquitectura de desarrollo web (desde ASP hasta Mono, pasando por PHP y Java)

Lo primero que utilicé fue ASP a secas. En cuanto el proyecto crecía, era muy difícil su mantenibilidad, por problemas derivados de su rapidez y potencia del lenguaje (VB Script).

Más tarde, reescribí el proyecto ASP anterior en PHP, esperando que con software libre obtuviera resultados mejores. Y lo fueron: PHP, además de ser libre, era más potente, disponía de más herramientas para facilitar el trabajo, más funcionalidades, etc.

Sin embargo, a medida que se va profundizando en PHP y los proyectos PHP van creciendo, se empiezan a ver herramientas para PHP que permiten tener más estructuradas las cosas: sistemas de plantillas como Smarty, frameworks MVC (Modelo Vista Controlador), e incluso la propia actualización de PHP4 a PHP5. Hasta que te das cuenta de que PHP, y todo su plataforma de desarrollo conjunta formada por estas herramientas, tiende a parecerse a cosas más robustas y estructuradas como las que existen para el mundo Java.

También he tocado Java con aplicaciones web, un poquito de JSP's y demás, pero no demasiado. Porque la verdad, yo también soy un poco reticente a Java, por el hecho de que no es software libre (quiero decir, que las máquinas virtuales de Java hechas por Sun, son de código abierto pero aún así no tienen licencia libre; y las máquinas virtuales de terceros que sí lo son aún están algo verdes).

Por eso, como veía que mi tendencia era llegar a Java sin usar Java, eché un vistazo a .NET. La plataforma .NET sin duda ofrece mucha productividad y el lenguaje C# se puede codear perfectamente con Java (incluso es mejor en algunas cosas EMNTHO, pero esto ya es discutible). Sin embargo, lo que echaba de menos con .NET eran dos cosas:

a) Una plataforma de desarrollo multiplataforma.
b) La tendencia "inherente" a los proyectos y plataformas de desarrollo del mundo Java de estructurar completamente y de forma exquisita el código, obteniendo capas de abstracción de la más mínima cosa (pero sin llegar al concepto del "over-engineering").

El punto (b) viene fundado, sobre todo, por la tecnología ASP.NET con la que irremediablamente he tenido que tratar a la ahora de utilizar la plataforma .NET. La versión 1.1 para empezar tiene importantes fallos concernientes a la arquitectura, como que resulta difícil hacer páginas web que validen con los estándares, y sobre todo, páginas web accesibles, en las que el JavaScript sea solamente una opción. Ofrece una capa de abstracción que hace que el programador se olvide de todo, y que incluso no necesite saber ni CSS ni JavaScript. Esto es en mi opinión un error. Además, desde el punto de vista del backend de una aplicación web, con ASP.NET es más difícil elaborar una estructura MVC (al parecer, Microsoft se enorgullece de hacer desaparecer, por arte de magia, la capa del Controlador). [Más información sobre esto en mi otro artículo "Inconvenientes de ASP.NET".]

Sin embargo, en el mundo Java, un ejemplo del punto (b) puede ser el proyecto Maverick, que ofrece un framework MVC para desarrollar aplicaciones web. Algo bastante elegante.

¿Qué decisión tomé entonces? Una intermedia: olvidarme definitivamente de PHP, no usar Java (J2EE), pero tampoco ASP.NET, ni nada que tenga que ver con Microsoft.

Actualmente estoy utilizando un framework MVC denominado "Maverick.NET", el cual es un port de Maverick de Java a C#, y me está dando unos resultados muy buenos. De esta manera solucionaba el punto (b) de mi lista de inconvenientes, pues es posible no utilizar ASP.NET con este Framework.

Para desarrollar utilizo MonoDevelop, y para los deployments utilizo el runtime de Mono, Apache 2.0 y el módulo mod_mono que permite reenviar las peticiones al servidor XSP de Mono. De esta manera solucionaba el punto (a) de mi lista de inconvenientes anterior.

Para la vista estoy utilizando serialización XML de las clases del controlador de manera que su resultado es transformado en XHTML mediante XSLT. Para la vista también utilizo CSS2/CSS3 (usando IE7/FixIE/IEpatch) y JavaScript no intrusivo (Unobstrusive JavaScript), al igual que JavaScript agnósitco ("crossbrowser") para la captura e implementación de eventos, y demás cosas, e incluso un poquito de AJAX...

Para el controlador uso lenguaje C# compilado en una librería .DLL. No necesito a Microsoft para nada porque he conseguido hacer funcionar Maverick.NET con Mono.

Y para el modelo, me había planteado utilizar algún sistema de mapeado objeto-relacional, como NHibernate, pero me estoy dando cuenta de que al final lo más eficiente, y EMO lo que es el futuro, son las bases de datos ya de por sí orientadas a objetos como DB4O (¡y te olvidas del SQL!).

Agradecería, pues, cualquier sugerencia/comentario/crítica, para mejorar la arquitectura y forma de desarrollar que he escogido por el momento ;)

Moraleja: EMO se pueden desarrollar aplicaciones web usando soluciones distintas a LAMP/J2EE/.NET, que a la vez cojan "lo mejor de los tres mundos": la libertad de licencia que proporcionan cada uno de los componentes del sistema LAMP (porque Mono también es libre), la estructuración y elegancia del mundo Java, y el novedoso lenguaje manejado/administrado y altamente tipado, propuesto por Microsoft como estándar ECMA: C#; y sin dejar de lado otras tecnologías complementarias que dan mucho que hablar últimamente, como AJAX en el lado del cliente y librerías de tratamiento de datos XML (transformaciones XSLT, serialización XML, ...) en el lado del servidor. Incluso he pensado en modificar las fuentes de Maverick.NET para dar la posibilidad a la capa del controlador de comunicarse con el modelo usando servicios web XML.

Saludos.

Reproducido de un comentario en BarraPunto que dejé al hilo de la noticia "El sistema LAMP pierde cuota de mercado".

Labels: , , ,


Wednesday, August 10, 2005

 

Segundo intento de hablar sobre IE7 en BarraPunto

Creo sinceramente que muchos desarrolladores web de habla hispana se beneficiarían infinitamente al usar las librerías javascript de Dean Edwards, un proyecto denominado, precisamente, IE7. Por eso hago mi segundo intento de publicar información en BarraPunto.

Debe ser que los editores están algo empeñados en que cualquier cosa que tenga que ver con IE7 es malo (opinión que respeto y comparto) pero la vez anterior no deben haber entendido bien de lo que hablaba, o sino no entiendo por qué se rechazaría...

Labels: , ,


This page is powered by Blogger. Isn't yours?

Categories

RSS of the category Gnome
RSS of the category Mono
RSS of the category C#
RSS of the category Programming
RSS of the category Mozilla
RSS of the category Web Development
RSS of the category Security
RSS of the category Open Source
RSS of the category Engineering
RSS of the category Misc
RSS of the category Politics

Contact with me:
aaragonesNOSPAMes@gnNOSPAMome.org

Archive
My Photo
Name:
Location: Hong Kong, Hong Kong
Follow me on Twitter