¿Cómo elegir un web framework?
Struts, Spring, Rails, Symfony, CakePHP, Dojo, YUI, Script.aculo.us, Django y más (muchos más). La lista de frameworks de desarrollo en web es larga, muy larga. ¿Cómo podemos elegir uno entre tantos? y antes que nada ¿qué es un framework?
Un framework es un conjunto de clases, funciones y/o herramientas que nos ayudan a construir una aplicación. Se diferencian de una librería por su tamaño y diversidad, aunque el límite no esta tan definido.
Existen dos grandes grupos de framework los full-stack y los glue, que los podemos diferenciar por sus objetivos.
- Full-Stack: el objetivo principal de los full-stack es proveer un conjunto de componentes que abarque todo lo que necesitas para construir una aplicación web, asegurandose que todos esos componentes funcionen bien entre si.
- Glue: por el contrario el objetivo de los glue es tener un conjunto de adaptadores e interfaces de código que pueden manejar varios componentes, es decir que funcionan bien mezclandose con otros componentes distintos al framework.
Razones para elegir un framework
¡No reinventemos la rueda!. Para que vamos a gastar tiempo desarrollando un sistema de template si puedo reutilizar uno, que ya esta probado por muchos usuarios.
La mayoría de los frameworks siguen buenas prácticas de programación como patrones de diseño y estan desarrollados por gente más hábil que nosotros.
Muchos de los web frameworks son abiertos y soportados por una comunidad que actualizan la funcionalidad y corrigen los bugs de manera sostenida.
Razones para NO elegir un framework
Empecemos con otro cliché, no hay balas de plata. Los framework tratan de abarcar la mayor variedad de aplicaciones, lo que hace que en muchos casos no se adapte a lo nuestro. También puede resultar que sea demasiado para lo que nosotros necesitamos, ¿o todas las aplicaciones tienen que soportar distintas bases de datos, múltiples idiomas, caché y ajax?.
¿Cuál de todos?
Lo básico para descargar cualquier framework es que actualmente lo usen bastantes personas programadores, que tenga una buena comunidad que lo soporte y que la documentación sea amplia y actualizada.
Para ver cuanta gente lo usa se puede ver el tráfico de las webs en Alexa (Ejemplo comparación de tráfico de algunos frameworks de PHP) o buscar en Technorati cuanta gente habla en sus blogs de un framework (Ejemplo: Django vs TurboGears).
El soporte de la comunidad es cuanta gente y cuanto participa en sus foros, chats y wikis. Es una buena oportunidad para ver el nivel de la comunidad, si el nivel es demasiado profesional o la comunidad tiene buen soporte para la gente que esta aprendiendo.
Sobre la documentación no hay mucho que decir simplemente leer un poco y ver todo el índice. Acordate: si un módulo o API no está documentado no existe.
La tabla de comparación de funcionalidad de frameworks que tiene la wikipedia es (ver tabla) una buena referencia a pesar de estar en inglés.
Paso a explicar que un poco el encabezado de la tabla:
- Ajax: el nivel de soporte que tiene el framework hacia otros frameworks de Ajax conocidos o si incluye soporte propio.
- MVC framework: MVC es Modelo-Vista-Controlador, un patrón de arquitectura de aplicaciones donde el modelo es el acceso a los datos, la vista es la salida (un html, un xml, texto, etc) y el controlador quien decide que datos (del modelo) y como mostrarlos y en que salida (a la vista).
- MVC Push/Pull: Una arquitectura MVC Push es cuando los datos son seteados en la vista, por el contrario de MVC Pull donde la vista los pide (mediante un getter por ejemplo). La mayoría sigue el enfoque MVC Push.
- i18n & l10n: i18n quiere decir internacionalización y l10n localización. Si el framework esta preparado para sitios internacionales con el soporte para cambiar los textos, el formate de la fecha y hora, la moneda, etc.
- ORM: Que tipo de mapeo de objetos a base de datos utiliza. Muchos usan el patrón Active Record. También es bastante usado Hibernate/NHibernate en Java y .NET.
- Testing framework(s): Si usa Unit Testing y que herramienta usa.
- DB migration framework(s): Soporte de migración de base de datos.
- Security Framework(s): Como trabaja el framework en el control de accesom es decir usuarios y roles. Generalmente se usa algun sistema basado en ACL.
- Template Framework(s): Que sistemas de template soporta el framework.
- Caching Framework(s): Los tipos de cache que estan integrados al framework. Hay varios tipos, pero memcache es uno muy usado.
- Form Validation Framework(s): Si integra la validación en los formularios.
Bonus Track: ¿Por qué crear un framework?
No recomiendo crear un framework. Es una tarea muy costosa y si se hace mal en vez de tener beneficios se tienen verdaderos dolores de huevo cabeza. Pero podemos justificar la creación de uno cuando nuestra área de trabajo es siempre la misma, como sistemas de inmobiliarias o blogs. Siempre va a ser mejor contar con un framework propio que haga nuestra tarea repetitiva. Sin embargo podemos aprovechar que casi siempre son abiertos los frameworks para adaptar alguno a nuestro caso y aprovechar la calidad del framework con la especialización de nuestra adaptación.
Fuentes: Python framework design, Comparison of web application framework, Clarification on MVC Pull and MVC Push

18-03-2008 at 0:15
me fui a tomar cafe!
18-03-2008 at 19:57
Muy bueno che!
nos vemo