Tengo una serie de artículos sobre optimización web a medio terminar, pero creí conveniente parar y tratar un poco la creación de frameworks para introducir posteriormente en la serie de artículos sobre optimización algo sobre cache.

Por eso mismo he estado desarrollando un mini framework en php (con la intención de hacerlo más ligero que, por ejemplo, cakephp) , y voy a ir contando mis experiencias sobre el asunto.

Introducción

El framework que por ahora mejor conozco es cakephp y ha influenciado bastante en mis decisiones a la hora de escoger un diseño u otro (tanto a la hora de escoger qué quería que tuviera, como a la hora de decidir qué me parece poco importante).

Sobretodo voy a listar qué es lo que no quiero para el framework que estoy haciendo (pues por querer, quiero demasiadas cosas y es una tontería escribirlas cuando ni tan siquiera sé si llegaré a implementarlas):

  • La excesiva "magia" que acababa implicando convenciones demasiado fuertes en cuanto a la nomenclatura, y una penalización en cuanto a rendimiento.
  • El acoplamiento excesivo entre modelos, controladores y vistas.
  • Que funcione sobre cualquier versión de PHP : utilizaré las características más novedosas que encuentre y no me preocuparé por la compatibilidad.
  • La forma en que está estructurado CakePHP provoca que no se puedan aprovechar correctamente las características del modelo de orientación a objetos.
  • Quiero evitar el abuso que se hace de los helpers, a veces me asusto cuando leo ciertos mensajes en la lista de correo de CakePHP española pidiendo ayuda sobre como crear simples enlaces o_o .

Pondré algunos detalles que sí quiero implementar, pero pocos:

  • Un mejor modelo de seguridad.
  • Un mejor modelo de control de errores.
  • Facilitar el unit testing.

Pasando a la acción

Todos los que hemos usado algún tipo de framework sabemos ya que éstos nos pueden llegar a facilitar mucho la vida a la hora de programar, pero lo que no todos saben es cuanta complejidad hay detrás de esas maravillas que nos simplifican el trabajo.

Empezemos por la parte "facil", la creación de rutas bonitas para las subsecciones de nuestra página. Esta parte solo funcionará sobre Apache o servidores que utilicen ficheros de configuración compatibles, y que tengan el módulo mod_rewrite activado. Escribimos las siguientes líneas en el fichero .htaccess :

1
2
3
4
5
6
<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

Lo que hacen estas líneas es redireccionar cualquier petición de la forma http://www.tuweb.com/seccion/subseccion/blabla a una petición de la forma http://www.tuweb.com/index.php?url=seccion/subseccion/blabla . Esto nos servirá para poder crear código que nos lleve a una sección u otra dependiendo del valor de la variable url, encapsulando en diferentes archivos el código necesario para gestionar cada sección.

Si queremos realizar una redirección similar en el servidor Cherokee debemos hacerlo desde el panel de administración (desgraciadamente Cherokee, aun siendo mucho más ligero que Apache y con un modo de configuración sorprendentemente fácil, no permite gestionar tan fácilmente las configuraciones en hostings compartidos).

En el siguiente artículo trataré el asunto de la introspección (o reflexión). Para los curiosos, podéis descargar e ir mirando el código del framework que estoy escribiendo en http://gitorious.org/pajarillo/ .