martes, 22 de septiembre de 2009

Frameworks en PHP... y otros lenguajes también

El framework... una de esas palabras que muchos informáticos usan pero que pocos saben qué es de lo que realmente se trata. Tal es así, que en muchas conversaciones nos tenemos que agarrar a la definición para que la cosa no migre al Reino Vegetal, específicamente para el lado de los tomates.

Pero no es que los interlocutores no se informen, o que sean nóveles en este campo, sino que muchos de ellos han pasado por la experiencia de usar reconocidos frameworks, de los que parece que sus creadores quisieron reinventar la informática partiendo de su (buen) conocimiento de las computadoras y algún lenguaje de programación, pero no teniendo muy en claro de qué se trata esto de los frameworks.

Entonces, vamos a la definición, como punto de partida: un framework representa una arquitectura de software que modela las relaciones generales de las entidades del dominio. Provee una estructura y una metodología de trabajo la cual extiende o utiliza las aplicaciones del dominio. Es decir, un framework está específicamente orientado a resolver o extender una solución general de un dominio de problemas.

Y acá tenemos otro escollo para comprender de qué estamos hablando: qué es un dominio en estos términos? Hasta la propia Wikipedia carece de la defición en este contexto! Sin embargo aborda el tema en su artículo sobre Lógica de Descripción, que nos viene muy al caso.

Como definición breve de "dominio" o mejor dicho "dominio de aplicación", podemos decir que es un área del conocimiento acotada que trata de una temática en particular, como por ejemplo el dominio de aplicación de los sistemas para laboratorios farmacéuticos.

Entonces, un framework es un conjunto de bibliotecas (siguiendo el paradigma de la Programación Esctructurada) o un concunto de Clases (siguiendo el paradigma de la Programación Orientada al Objeto) que resuelven un problema de un dominio de aplicación.

Al fin, hemos arribado a una definición.

Bien, ahora, seamos críticos con algunas piezas de software. En PHP, lenguaje mayormente usado para la web, hay muchos, muchísimos framework "para el desarrollo de un sitio web", pero como se ve, es un dominio tan genérico y tan vasto, que no pueden resolver nada concreto. No es lo mismo una web para comercio electrónico que una web de profesionales de la salud: no son el mismo dominio, por tanto, las relaciones entre los diferentes elementos del dominio no será la misma, como de hecho no lo son tampoco los elementos en sí.

Si vamos a desglosar algunas tareas que son comunes a los sitios web, resulta que solamente nos podemos quedar con algún aspecto de la interfaz con el usuario, o con algún aspecto del recupero y modifición de datos, pero en tal caso estaremos usando un framework para interfaces gráficas web y un framework para persistencia de Objetos, que tendremos que integrar y al que tendremos que agregarle el conocimiento, las restricciones y las relaciones con los diferentes elementos del dominio, que será el comercio electrónico o los profesionales de la salud.

Escribir un framework es una tarea apacionante, por su complejidad y belleza, pero no es una tarea que cualquiera pueda encarar. Kent Beck afirma que no tiene sentido diseñar un framework si no se han resuelto ya exitosamente al menos tres sistemas de un dominio de aplicación. Recién en ese momento podremos hacer las generalizaciones y abstracciones suficientes para tener una pieza de código extensible que refleje las interelaciones entre los elementos del dominio.

Por todo esto, cuando un framework se presenta para resolver un problema genérico o demasiado amplio, hay que detenerse y al menos sospechar.

No hay comentarios.:

Publicar un comentario