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: , , ,


Comments:
Hola,

que me podrias enviar un e-mail sobre el tema de maverick.net .. estoy haciendo pruebas. i no me aclaro mucho jeje.

Tu lo utilizas desde mono , yo lo estoy utilizando desde asp.net con el framework de microsoft.

la teoria es la misma.
 
Pues no sé cómo quieres que te mande un e-mail si no me pones tu e-mail.

Yo también he utilizado Maverick.NET con el Framework de Microsoft, antes de echarlo a andar con Mono; pero, ¿qué duda tienes? Como no séas más explícito va a ser difícil.

De todas formas en la web del proyecto hay bastante documentación. A mí no me enseñó nadie. Pero bueno, también hay una lista de correo.

Saludos.
 
Aix , tienes toda la razon jeje.. y yo sin poner ningun e-mail jeje ;)
espi ( luego pones la arroba como no ) espipinxo ( luego el punto ) com

Bueno .. te explico , en los ejemplos de maverick.net por ejemplo , los Friendbook , pareceria que no estan del todo acabados no ? ya que .. quiero mirar lo y por ejemplo , a la hora de crear un usuario . el form utiliza un .m que ni existe.

la otra qüestion esta .. con visual studio .net .crear un nuevo proyecto , no se por donde empezar.


es que estoy empezando en el tema de dessarolloar MVC y voy bastante perdido ..
 
This comment has been removed by a blog administrator.
 
Lo que dices que tiene extensión ".m" no es un fichero, sino un comando, que no se corresponde con un fichero "físico" del árbol de recursos del servidor web.

Si realmente te interesa el tema, te recomiendo que te leas toda la documentación de Maverick.NET antes de hacer preguntas como ésta. Si después de leerlo tienes dudas, te intentaré ayudar en todo lo posible.

Por cierto, para solucionar lo de que tu IIS no maneje los comandos ".m", tienes que configurar IIS correctamente. Si alguna vez lo montas con Mono, que sepas que este paso no es necesario porque los propios ficheros de configuración son leídos por XSP y se entera de cómo tiene que manejar estas extensiones .m de los comandos.
 
Post a Comment



<< Home

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