sábado, enero 24, 2009

Por qué no pensar en usar Symfony para Orfeo ?

Bueno, últimamente he estado probando y mirando algunos de los aspectos de Orfeo (el gestor documental libre) y realmente no pensé que fuera un software tan grande y al hablar con algunas personas del medio no conocía que ya estuviera implementado en varias entidades públicas del país y empresas del sector privado, desde luego con éxito. Sin embargo, y lo digo sin conocimiento de causa, creo que el software ha llegado a un punto en que hacerlo mantenible es una tarea de gran esfuerzo, debido a que observo que no existe una arquitectura muy definida y algo importante como lo es la división por capas, se encuentra totalmente ausente. Reitero, que no conozco los motivos por los cuales el proyecto ha avanzado en esa forma, es sólo lo que he observado desde hace unos tres meses. Pero, como la labor no es criticar si no brindar soluciones a los problemas y brindar mejoras sobre lo existente, después de reflexionar un poco, pienso que una buena manera de empezar a darle forma al proyecto es la adopción de un framework para su desarrollo; y desde luego que pienso en Symfony como una gran alternativa, por sus características y por el grado de madurez que ha alcanzado. Revisando el roadmap de la versión 4.0 de Orfeo, veo que se considera la elección de un framework (Spring) que supone desde luego un cambio de lenguaje, diría yo bastante drástico, que en buena medida desaprovecharía el trabajo realizado hasta ahora, no digo que Java no sea adecuado, pero supondría una esfuerzo adicional, tanto a nivel de test como de equipo de desarrollo, por la experiencia que se ha ganado. No obstante en la guia de discusión de Orfeo (disponible en el sitio web), se consideran algunas características que debe tener el lenguaje de programación:

  • Características del lenguaje y nivel de abstracción.
  • Desempeño del lenguaje
  • Simplicidad y rapidez de desarrollo
  • Experticia de los programadores
  • Frameworks disponibles y sus prestaciones
  • Facilidades de escalabilidad y alta disponibilidad
  • Transacciones
  • Existencia de módulos reusables.
Aunque son bastante generales, dichos requerimientos se pueden satisfacer plenamente con el uso de Symfony, repasemos cada uno de estos puntos:

Características del lenguaje y nivel de abstracción

Desde PHP 5.x, es claro para aquellos que han usado PHP, el buen trabajo respecto al soporte para programación orientada a objetos, aunque se debe reconocer que no es total. Sin embargo, esta "deficiencia" se suple con la arquitectura que plantea Symfony y las grandes facilidades y herramientas que brinda. (Ver un resumen), por ejemplo la utilización de una capa de abstracción a base de datos potente (estan disponibles Propel y Doctrine), separación de las reglas de negocio, manejo de patrón MVC, núcleo de clases que incluye: validación, seguridad, etc.

Desempeño del lenguaje


Aunque el desempeño de los lenguajes interpretados es un poco menor al de los compilados, existen mecanismos que permiten acelerar y mejorar esta característica. Symfony incorpora un sistema de cache, del lado servidor bastante flexible y configurable. (Ver Uso de la cache)

Simplicidad y rapidez en el desarrollo

Como lo mencioné anteriormente, Symfony provee una serie de clases y mecanismos que brindan al desarrollador bastante libertad y lo permiten concentrarse en las labores específicas del desarrollo y no en cuestiones inherentes a todo desarrollo web, por ejemplo el manejo de usuarios, sesiones, formularios, validación, etc. Se basa en la premisa de: convenir en vez de configurar, en la que el desarrollador sólo debe configurar aquello que no es convencional. (Tomado del Libro de Symfony en castellano, Capítulo 1)

Experticia de los programadores

Desde su concepción, Orfeo ha sido desarrollado en PHP y la experticia que han ganado las personas involuradas en el proyecto, es una ventaja enorme, que no debe ser desaprovechada y por el contrario aplicada al manejo del framework.

Frameworks disponibles y sus prestaciones

Creo que esto no requiere de una explicación. Más información en:


Facilidades de escalabilidad y alta disponibilidad

Symfony ha sido concebido para que las aplicaciones desarrolladas con este framework sean fácilmente mantenibles y por ende escalables. De hecho se proveen mecanismos para hacer actualizaciones entre versiones del framework. Además, la separación por capas, hace que el código generado sea más claro, aumentando la legibilidad, una ventaja en proyectos en donde muchas personas participan. De otro lado, Symfony es un proyecto con bastante respaldo y que cuenta con la colaboración y soporte de muchas personas en el mundo, como buen proyecto de Software Libre.

Transacciones

Aunque esto depende en gran medida del motor de base de datos que se utilice, Symfony incluye el ORM Doctrine, que soporta el trabajo con transacciones. Más información.

Existencia de módulos reusables

Symfony provee un mecanismo de plugins, para su extensión y reutilización. De hecho actualmente existen 416 plugins en diversas categorías, que se pueden "reusar" y adaptar.

Bien, hasta aqui sólo he descrito algunas características de Symfony y el porqué pienso que el proyecto Orfeo debería mirar hacia este framework, además de otros proyectos como OWASP. Desde luego, que queda mucho por evaluar y revisar (la conferencia PHP de 2009 en Quebec traerá bastantes novedades).

Opiniones ?? Sugerencias ??


3 comentarios:

AndresVia dijo...

Java tiene una empresa grande detrás que hace lobby, y tiene mas poder mediático, no sería de extrañarse que haya contratos de soporte con Sun negociados.

Por lo poquísimo que he tenido la "suerte" de ver del código de Orfeo me doy cuenta de que hace cosas chapuceras que ni siquiera yo haría. Definitivamente necesita un framework.

adjuntar_masiva.php

Por otro lado un software para tal burocracia no me gusta, no me gustaría nunca tener que trabajar con eso. Menos si lo que hay mantener es un bulto de anzuelos. Sip, necesita un framework y Symphony no es mala elección.

El reto, sin importar cuál framework se use es como migrar ese monstruo.

jpromerobx dijo...

Es cierto que Java cuenta con el apoyo de una empresa y tiene más posibilidades de ser tenido en cuenta para la próxima versión de Orfeo.

Sin embargo, y como tú lo has dicho, el punto es poder estructurar el proyecto, debido al impacto que ha tenido en nuestras instituciones y al crecimiento que se proyecta; de hecho que el Ecuador y otros países de la región lo hayan adoptado es un buen indicio, pero es urgente su reingeniería, y la adopción de Symfony sería una gran paso.

Camilo dijo...

Escuche tambien sobre una implementacion en Django, que me gusta mas que symphony.

En firme, creo que lo importante es definir un framework independiente de cual, pero que se consiga una estructura estandarizada para el software.

Muy buen análisis Juan.