Crítica a Drupal
Los que seguís el blog sabéis que he estado usando Drupal algún tiempo y que he hecho algunos módulos y todo.
Esto me ha hecho darme cuenta de algunas carencias y posibles mejoras que podría tener Drupal.
Problemas
Programación estructurada
El primer problema que veo a Drupal es que utiliza programación estructurada. En mi opinión, eso es un error.
Yo no soy un gran conocedor de PHP, pero lo nuevo que voy descubriendo de este lenguaje me parece interesante. De hecho no sabía que se podían crear clases.
Drupal se basa en “hook"s, es decir, en convenciones de nombres. Para evitar problemas en los espacios de nombres, obliga a comenzar los nombres de las funciones con el nombre del módulo. Esto supone varias cosas:
- Nombres de funciones más largos, lo que dificulta la lectura del código.
- Dificultad para cambiar el nombre a un módulo.
- Si dos módulos se llaman igual, sólo se puede instalar uno de ellos.
- Tienes que conocer el nombre exacto del hook a utilizar, así como sus parámetros.
Este tipo de programación estaba bien antes de que se inventara la programación
orientada a objetos. Con un pequeño cambio, como es hacer que los módulos sean
clases que heredan de la clase Drupal_Module
(por ejemplo), todo estaría solucionado.
Esta clase padre podría tener métodos abstractos puros, que son los métodos que se deben implementar. También podría tener métodos abstractos con una implementación por defecto, lo que los haría opcionales.
Este pequeño cambio ayudaría en distintos aspectos:
- La visibilidad de los métodos sería explícita.
- No existe la posibilidad de colisión de dos métodos con el mismo nombre, ya que pertenecen a clases distintas, y por lo tanto pueden ser más cortos y descriptivos.
- La propia herencia obliga a implementar los métodos obligatorios.
- La propia herencia ayuda a implementar los métodos opcionales.
- El código queda más limpio y estructurado.
Accesos a la base de datos.
La falta de un ORM obliga a acceder directamente a la base de datos. Eso implica que un cambio de base de datos es impensable.
Cualquier cambio en la base de datos puede provocar errores posteriores, si algún @insert@ o @update@ está mal definido. Encontrar este tipo de problemas puede ser complejo.
Además, la forma de crear la base de datos es demasiado descriptiva. La definición resulta más tediosa que un acceso directo a la base de datos mediante SQL.
Finalmente, la convención para las consultas resulta confusa, ya que no es intuitivo introducir los nombres de las tablas entre llaves o las palabras reservadas en mayúsculas.
Realización de pruebas
No he encontrado un sistema sencillo para la realización de pruebas de los módulos que se están creando, salvo la prueba manual. Ésta no debería ser una opción.
Qué significa esto
¿Significa esto que Drupal es malo? ¿Significa que no debo usarlo?
En absoluto. En mi opinión, Drupal está muy bien para usarlo para lo que sirve: como CMS. Es una manera fácil y rápida de crear un sitio web que no requiera grandes modificaciones y cuyas carencias puedan suplirse con plugins externos.
Resulta muy sencillo cambiar la apariencia de un site, así como administrarlo por una persona con poca experiencia.
Mi propio site es un Drupal, y dudo mucho que esto vaya a cambiar.
Sin embargo, creo que es un error instalar Drupal como aplicación para terceros, ya que su complejidad se dispara a medida que la aplicación se hace más compleja.
En estos casos, es mejor buscar un Framework y adaptar la solución a medida. Hay muchas soluciones libres que facilitan todo esto: CodeIgniter, Kohana o CakePHP son buenos ejemplos de este tipo de utilidades en PHP. Exiten otras opciones, como Ruby on Rails o Django en otros lenguajes distintos de PHP.
Evaluación de distintas opciones
Si necesitamos potencia, yo buscaría en Java, con frameworks JSF tan potentes como MyFaces. El gran problema de esto es el precio del servidor: es necesario disponer de un VPS (un servidor virtual privado) y ésta es una opción cara. Evidentemente, la situación cambia si disponemos de nuestro propio servidor o de recursos suficientes.
Recientemente he estado investigando Django y, pese a convencerme completamente, me he encontrado muchos problemas de despliegue y compatibilidad hacia atrás que me han hecho replanteármelo. Finalmente, haciendo caso de un amigo (Germandz), he decidido echar un ojo a Kohana y de momento me está dejando una impresión muy favorable.
Esto no significa que vaya a cambiar el site de Drupal a Kohana. Ni mucho menos. Significa que si se desea realizar una aplicación web, en ocasiones, Drupal no es la mejor opción.
Conclusión
En general, si Drupal, tal cual, nos soluciona un problema, creo que es la mejor opción. Sin embargo, si lo que queremos es realizar una aplicación web, entonces es mejor buscar otra cosa.
Por mi parte, abandono la programación en Drupal. No sé si sacaré algún tutorial más a este respecto, aunque tampoco lo descarto. He decidido centrarme más en Kohana. El primer tutorial lo tendréis en breve.