miércoles, 30 de abril de 2014

Arquitectura PHP para desarrollo ágil

Estuve evaluando 3 frameworks PHP para decidir cuál vamos a utilizar para uno de los próximos proyectos
  1. Codeigniter (http://ellislab.com/codeigniter)
  2. Zend Framework (http://framework.zend.com/)
  3. Laravel (http://laravel.com/)

Los dos primeros tiene suficiente madurez y el tercero es un framework relativamente nuevo.
Mi objetivo era tratar de descubrir cuál es el que facilitaría en mayor medida la tarea para desarrollos complejos de gran escala.
Lo ideal es que el elegido sea simple, eficiente y disponga de suficientes librerías y documentación; pero..
Es esto suficiente como para agilizar el desarrollo de sistemas complejos??




Resumen de características de los frameworks PHP mencionados

  1. Codeigniter: Es simple y eficiente. No se puede agregar más.
  2. ZendF: Es complejo pero eficiente. En comparación a CI, tiene muchas más reglas para derivar en la implementación del modelo MVC.
  3. Laravel:  Surge bajo la filosofía: "Reducir el costo de emprender el desarrollo facilitando las tareas comunes". Por lo que viene equipado con un conjunto de herramientas destinadas a producir esqueletos de código que respeten las convenciones y que facilite el uso de otras características como mapeo OR, y actualización de paquetes mediante "Composer".

En particular, lo que más llamo mi atención de Laravel fue que:

  • Dispone de un sistema de plantillas (Blade) diseñado para depurar la estructura de las vistas. Evitando incluir lógica de programación en la plantilla y grandes bloques de código incrustado, que hace difícil determinar la salida a simple vista.
  • Se puede extender la base funcional mediante la inclusión de paquetes; librerías desarrolladas por terceros y gestionadas a través de "Composer"; lo cual quiere decir que se puede aprovechar las ventajas de las actualizaciones que se produzcan para dichas componentes.
  • Los controladores se organizan y rutean para que se pueda utilizar como recurso API Rest, lo cuál me sorprendió y me encantó.

Y?.. Pues, hasta aquí no encontré lo que andaba buscando..
La razón fundamental es que también buscaba algo más parecido a los CMS y la posibilidad de incorporar funcionalidad con una separación clara y ordenada.


Ventajas de la arquitectura orientada a plugins


Algo que aprendí a valorar al desarrollar con WordPress es el esquema de extensión funcional que propone por medio de plugins.
Ninguno de los frameworks de php "pura sangre" nos provee de un nivel de arquitectura semejante.
La razón: WordPress tiene un nivel funcional de aplicación y en dicho nivel se establece todas las reglas de acoplamiento para extensiones desarrolladas por terceros.
Los framewors PHP "pura sangre" no llegan al nivel funcional de aplicación; se supone que se limitan asegurar una mínima base funcional, generalmente respetando algún modelo de desarrollo como el MVC; lo cual sirve como una convención de partida para desarrollar una arquitectura de aplicación clara y simple. En resumen: Entendible por todos.


Ok. Y por qué no utilizar un CMS??


Simple: Todo depende de la solución requerida y en muchos casos, la solución, queda fuera del objetivo particular del CMS que es la construcción y administración de paginas web, y no la de desarrollo de sistemas complejos.

Por ejemplo; lo más genérico en un CMS es:
  • la arquitectura orientada a plugins
  • las interfaces de administración ya que no hay que diseñarla desde cero.
  • la gestión de usuarios y permisos

Sin embargo, dichas características se encuentran generalmente fuertemente acopladas con otras características de administración; lo que hace que, a medida que se avance en el desarrollo, se haga más necesario invertir tiempo en tratar de desacoplar funcionalidad innecesaria, o que no debería ser accesible; convirtiéndola en una opción poco aconsejable.

Y de vuelta en donde comencé!


Sea cual sea el framework php elegido..


Tal vez, lo importante que logré vislumbrar es la importancia que tiene producir una plataforma con arquitectura modular que sea multipropósito; con gestión de usuarios e interfaz de administración integrada y lista para escalar.

A partir de dicha base comenzaría a construir los módulos bajo el criterio que adopte el framework seleccionado; generalmente el modelo MVC Jerárquico (HMVC)
Y trataría de mantener una separación funcional coherente bajo control de versiones, para que todos los proyectos que usen esta plataforma se beneficien con las mejoras realizadas en el proyecto de turno.



Para poner en orden los conceptos


Los frameworks PHP utilizan arquitectura MVC o HMVC para facilitar la reutilización de código, lo cual NO es suficiente para asegurar un desarrollo ágil; pero, si a su vez utilizamos desarrollo basado en componentes, estaremos facilitando la reutilización de software, que es lo que verdaderamente agiliza el desarrollo a corto y largo plazo.
 
Fuente de la imagen: Aplicaciones Distribuidas

Hasta la próxima!!

No hay comentarios.:

Publicar un comentario