Un framework es un conjunto de elementos que juntos nos ayudan a construir software
de una manera más sencilla, de mayor calidad, y en menor tiempo. Podríamos decir
que un framework se compone de las siguientes características:
Un objetivo limitado y concreto
El framework sirve para resolver una tarea perfectamente definida. Puede ser la
distribución de las capas en nuestro sistema, facilitarnos la construcción de una
capa en concreto, relacionar entidades de negocio con entidades de base de datos,
o ayudarnos con otros aspectos como la inyección de código o semejantes.
Un conjunto de librerías
Un framework agrupa librerías diseñadas para solucionar la tarea para la cual está
pensando. Dichas librerías están basadas en patrones de software y son consistente
en todo el paquete (todos las objetos son creados y se usan de la misma forma).
Además su funcionalidad es completamente extensible para resolver nuevas necesidades
(sin modificar las librerías mismas).
Posiblemente un conjunto de herramientas
Aunque este punto podría estar incluido en el anterior, decidí hacer una división
mas practicas. Las librería son los elementos que son referenciados desde nuestro
código, la herramientas son aquellas que nos ayudan a crear nuestro código. Pueden
ser que creen de forma automática todas las entidades de nuestro negocio o las entidades
de nuestra base de datos, o las páginas web de nuestra aplicación. Los generadores
de código automáticos entran en esta categoría.
Patrones de diseño
Los frameworks esta íntimamente relaciones con los patrones de diseño. Generalmente
implementan una colección bastante común y amplia de ellos, y además obligan a que
se sigan implementando dichos patrones en los sistemas donde son usando.
Metodología de trabajo
A la vez que el framework ofrece una colección de librerías para resolver un problema,
también debe ofrecer una metodología de trabajo que nos indique como hacerlo. Solo
hay una forma de hacer las cosas de forma "correcta" y esa es la forma es indicada
por el mismo framework.
Si no se cumplen esta serie de características entonces no estaríamos hablando de
un framework, sino simplemente de un conjunto de librerías reutilizables agrupadas.