Introducción
En un primer paso nos centraremos en
explicar qué son los frameworks mostrando sus principales ventajas y
características, para posteriormente hablar sobre dos de los
Framework más utilizados a la hora de crear aplicaciones web, como
son Symfony 2 para aplicaciones creadas en PHP y Struts 2 para
proyectos donde el lenguaje utilizado es Java.
¿Qué es un framework?
En contra de lo que muchos pudierais
pensar, un framework no es ningún software ni herramienta que
se ejecuta y que nos ofrece una interfaz gráfica desde la que
trabajar, sino que es un conjunto de archivos y directorios que
facilitan la creación de aplicaciones, ya que incorporan
funcionalidades ya desarrolladas y probada
s,
implementadas en un determinado lenguaje de programación.
En la siguiente imagen se puede ver
cómo sería la estructura de directorios correspondiente a un
proyecto desarrollado con Symfony 2.
El objetivo principal de todo
framework es facilitar las cosas a la hora de desarrollar una
aplicación, haciendo que nos centremos en el verdadero problema y
nos olvidemos de implementar funcionalidades que son de uso común
como puede ser el registro de un usuario, establecer conexión con la
base de datos, manejo de sesiones de usuario o el almacenamiento en
base de datos de contenido cacheado.
¿Qué es un
framework Web?.
El concepto framework se emplea un
muchos ámbitos del desarrollo de sistemas software, no solo en el
ámbito de aplicaciones Web. Podemos encontrar frameworks para el
desarrollo de aplicaciones médicas, de visión por computador, para
el desarrollo de juegos, y para cualquier ámbito que pueda
ocurrírsenos.
En general, con el término framework,
nos estamos refiriendo a una estructura software compuesta de
componentes personalizables e intercambiables para el desarrollo de
una aplicación. En otras palabras, un framework se puede considerar
como una aplicación genérica incompleta y configurable a la que
podemos añadirle las últimas piezas para construir una aplicación
concreta.
Los objetivos principales que persigue un
framework son:
-
acelerar el proceso de desarrollo,
-
reutilizar código ya existente y
-
promover buenas prácticas de desarrollo
como el uso de patrones.
Ventajas de utilizar
un Framework
El uso de un framework a la hora de realizar
un proyecto, ofrece importantes ventajas, ventajas ya no sólo al
facilitarnos la tarea de la creación de la aplicación, sino otras como en el
mantenimiento del código, realizar ampliaciones, etc.
a)
Uso de patrones de diseño
Uno de las principales ventajas que ofrecen
los framework es el uso de patrones de diseño para el desarrollo de la
aplicación. El patrón más utilizado y que casi todos los framework utilizan
es el conocido como Modelo – Vista – Controlador (MVC), un modelo que divide
el desarrollo en tres capas:
• Modelo:
Representa los datos de la aplicación y sus reglas de negocio.
• Vista:
Representa la capa presentación, como representamos los datos a los
usuarios.
• Controlador:
Es el encargado de procesar las peticiones de los usuarios y controla el
flujo de ejecución del sistema.
El modelo MVC puede ser implementado
sin la necesidad de utilizar un framework, pero la diferencia radica en que
el framework nos obliga a utilizarlo, creando de esta forma un código mucho
más robusto. Además el uso de este tipo de utilidades nos ayuda a evitar el
conocido como “código spaghetti”, que consiste en meter funcionalidades en
capas que no corresponde, lo que con el paso de tiempo hará que nuestro
código sea un verdadero caos, hasta para nosotros mismos.
b)
Estructura predefinida de la aplicación
El programador no necesita plantearse la
estructura global de la aplicación, ya que esta es proporcionada por el
propio framework. Esto tiene la ventaja de que pasado un tiempo, si tenemos
que tocar algo en la aplicación, sabremos donde encontrar el archivo en
cuestión de forma rápida.
c)
Código altamente testeado
Todo el código que forma parte del framework
está altamente probado, lo que garantiza el buen funcionamiento del mismo.
Nosotros podríamos desarrollar esas mismas funcionalidades, pero nunca
podremos garantizar ese nivel de testeo que ofrecen los frameworks.
d)
Comunidad de usuarios detrás de cada framework
La gran mayoría de los frameworks tienen
detrás a una amplia comunidad de usuarios, de los cuales muchos ayudan en su
desarrollo o creando extensiones con funcionalidades extra que podremos
utilizar de forma sencilla sin tener que desarrollarlas por nuestra cuenta.
e)
Trabajo en equipo
El uso de frameworks facilita el trabajo en
equipo, ya que si todos conocen el framework utilizado, conocerán la
estructura de directorios y sabrán dónde tienen que ir para realizar una
determinada acción.
Desventajas de
utilizar un Framework
El uso de los framework también tiene sus
limitaciones, por tanto es bueno conocerlas antes de embarcarse en un
proyecto. Las desventajas principales son:
a)
Tiempo de aprendizaje
Te llevará algún tiempo conocer cómo funcionan
los frameworks y, pero la idea es que una vez que te habitúes a ellos los
siguientes proyectos tendrán una base más definida y su puesta en marcha
será más rápida.
b)
Exceso de líneas de código
Muchos autores y expertos en el desarrollo de
aplicaciones apuntan que los framework utilizan muchas más líneas de código
para realizar ciertas acciones ya que suelen incluir “código basura” que nos
podríamos haber ahorrado, aunque esto no es compartido por todo el mundo.
c)
Limitaciones
Cuando usas un framework hay partes de él que
no puedes modificar, por ello hay que elegir uno que se adapte a lo que
buscas. Además, migrar a otro framework es complicado sin tener que
reescribir todo el código.
d)
Código público
Al estar disponible el framework para todo el
mundo, un hacker puede estudiar el código y encontrar debilidades, aunque es
algo difícil, porque tendría que saber qué framework estás usando. Además,
algunos como Symfony son testados continuamente para reducir al máximo los
bugs.
Características de los frameworks
A continuación os dejamos algunas
características que suelen incluir todos los frameworks existentes.
• Abstracción
de URLs y sesiones. No es necesario manejar
directamente las URLs ni las sesiones, ya que el framework se encarga de
hacerlo.
• Acceso
a datos. Incluyen herramientas e interfaces
necesarias para comunicarse con bases de datos, independientemente del tipo
que estemos utilizando.
• Uso
de controladores. Suelen implementar una serie de
controladores para la gestión de los eventos y peticiones realizadas a la
aplicación.
• Autentificación
y control de acceso. Incluyen mecanismos para la
identificación de usuarios mediante el uso de login y password.
• Internalización.
Son mecanismos para poder mostrar la aplicación en todos aquellos idiomas
que consideremos oportunos.
¿Cómo elegir el framework a utilizar?
Si realizamos una búsqueda en internet nos
aparecerá un gran número de frameworks para utilizar, pero, ¿por cuál
decantarnos? a Grosso modo deberemos tener en cuenta el tipo de aplicación
que vamos a desarrollar, así como el lenguaje de programación que
utilizaremos para ello. Otras cosas que nos tenemos que plantear son:
• Conocimientos
del equipo. Es de suma importancia evaluar el
lenguaje con el que se siente cómodo el equipo encargado de desarrollar la
aplicación. Si los encargados de su desarrollo controlan PHP, lo más
aconsejable es decantarse por uno que haga uso de este tipo de lenguaje.
• Soporte.
Un punto a tener en cuenta para la elección de un
framework es ver la comunidad que hay detrás de él. Es recomendable
investigar un poco para saber si están trabajando en nuevas versiones o bien
se trata de un proyecto abandonado.
• Existencia
de proyectos desarrollados con él. No caigamos en
la tentación de actuar como conejillos de indias y decantarnos por aquel
framework que sepamos que ha sido utilizado para la creación de algún
proyecto de éxito.
• Curva
de aprendizaje. Como hemos explicado, este punto
es el que más echa para atrás a las personas a la hora de utilizar un
framework, de ahí que sea muy recomendable decantarse por aquel que tenga
una curva de aprendizaje más rápida.
• Soporte
para el MVC. El uso de patrones de diseño es
básico en una aplicación bien estructurada, pero el uso del patrón MVC es
imprescindible para la mayoría de proyectos. Como nota, algunos frameworks
ofrecen MVC como una alternativa, no obligando a su uso. Esto puede ser
útil, por ejemplo si quieres implementar tareas internas automatizadas, como
emailings,
tareas de mantenimiento de la BBDD, etc.
• Framework
que esté desarrollado tomando la seguridad como punto de partida.
En el mercado nos podemos encontrar framework con buenas características
pero que dejan de lado la seguridad.
Ejemplos de
frameworks que nos podemos encontrar
A continuación os dejamos un listado de
frameworks que nos podemos encontrar.
• Ruby
on Rails.
Framework MVC basado en Ruby orientado al desarrollo de aplicaciones web.
• Codelgniter.
Framework basado en PHP liviano y rápido
• Djando.
Un framework para Python capaz de crear diseños muy limpios
• Zend
Framework. Es un framework de código
abierto en PHP para desarrollar aplicaciones web y servicios web con PHP 5.
• Symfony.
Completo framework en PHP diseñado para optimizar el desarrollo de las
aplicaciones web basado en el patrón Modelo Vista Controlador
• Yii.
Framework en PHP basado en componentes
• Struts.
Herramienta
de soporte para el desarrollo de aplicaciones Web bajo el patrón MVC bajo la
plataforma Java EE (Java Enterprise Edition)
• ASP
.NET.
Es un
framework para aplicaciones web desarrollado y comercializado por Microsoft
Clasificación de los web frameworks
El mercado de las
aplicaciones web es muy variado. Las apps disponibles en
el navegador se diferencian entre sí, en función del ámbito de
aplicación y del espectro de funciones, no solo en cuanto a
tamaño y apariencia, sino también en lo referente al diseño del
software.
El motivo para
ello es la diversidad de los frameworks web disponibles, basados
en diferentes tecnologías y que siguen diferentes
planteamientos en el diseño de software. En
contraposición, también funcionan los enfoques de una única
página, múltiple, del lado del servidor y del cliente, así como
los frameworks web basados en acciones y en componentes.
Enfoques de página única y múltiple
Las aplicaciones
de página múltiple están formadas por varias páginas HTML que,
por regla general, se abren al introducir la correspondiente
dirección URL en el navegador y que están conectadas entre sí
mediante hipervínculos.
La interfaz de
usuario de una aplicación de página única, por su parte, consta
de una página HTML en la que convergen todas las entradas del
usuario. Esta puede estructurarse a través de paneles, pestañas
o tarjetas de registro, pero la dirección URL de una aplicación
de página única no se modifica durante la navegación.
Web frameworks del lado del servidor y del cliente
El
modelo de programación de una aplicación web clásica se
corresponde con el de la World Wide Web, cuya arquitectura está
marcada por el Hypertext
Transfer Protocol (HTTP). Cuando un usuario accede a
una aplicación web, en ello participan tanto uno o varios
servidores como un programa cliente, por lo general, un
navegador web. En función de cómo esté diseñada la comunicación
entre el servidor y el cliente se puede hablar de aplicaciones
centradas en el servidor (server-centric) o en el cliente (client-centric):
-
Client-centric: si,
al iniciar una aplicación, la interfaz de usuario HTML,
incluida la lógica de la aplicación, se carga en su
totalidad en el cliente, se puede hablar de aplicaciones
centradas en el cliente. Los cambios en la interfaz a causa
de las entradas del usuario son realizados por medio de
lenguajes de programación del lado del cliente, como por
ejemplo JavaScript.
Un
enfoque de diseño como tal es el que se recomienda para
aplicaciones en las que los usuarios trabajan durante un
espacio de tiempo prolongado en la misma vista, ya que el
servidor vuelve a cargar los datos de la interfaz. El
enfoque o planteamiento del lado del cliente se utiliza para
desarrollar aplicaciones de página única y es seguido por
frameworks de JavaScript como AngularJS o EmberJS.
-
Server-centric: en el caso de las aplicaciones
centradas en el servidor, la lógica de la aplicación
permanece en el servidor, que crea la interfaz de usuario y
la entrega a los clientes para su presentación. Para llevar
a cabo cambios en dicha interfaz, se puede recurrir a
lenguajes de programación del lado del servidor y, en gran
parte, dichos cambios se llevan a cabo con independencia de
las inseguridades del lado del cliente.
Este planteamiento se aplica, en general,
en las aplicaciones de página múltiple, en las que se puede
acceder a las diversas vistas de página en función de las
necesidades del servidor. Un diseño de software de tales
características está ligado a tiempos de carga más
prolongados, aunque reduce los requerimientos en el
dispositivo del cliente. En algunas apps también se puede
evitar, en este sentido, la permuta de la lógica de control
por motivos de seguridad. La realización de este
planteamiento del lado del servidor es el que se da, por
ejemplo, en frameworks como Django, Zend y Ruby on Rails.
Un enfoque centrado en el servidor está presente,
sobre todo, en frameworks desarrollados para crear
aplicaciones web clásicas con una estructura de página
múltiple e interfaces HTML clásicas. En estas aplicaciones solo
se muestra la interfaz, que, por regla general, utiliza el
navegador, lo que hace que pueden ejecutarse independientemente
del sistema operativo o navegador web que se use. El servidor se
encarga de la lógica de control siguiendo el esquema de
comunicación de solicitud-respuesta de HTTP.
Las aplicaciones web centradas en el cliente
también reciben el nombre de Rich Clients o Rich Internet
Applications (RIA). Este tipo de aplicaciones implementan la
interfaz de usuario y la lógica de aplicación en el cliente, la
cual se cargará completamente cuando dichas aplicaciones se
inicien. Al contrario de lo que ocurre con las aplicaciones web
clásicas, al optar por el enfoque del lado del cliente se pueden
llevar a la práctica otro tipo de funciones, como el control por
drag and drop, la accesibilidad en línea y el acceso al disco
duro, usuales en las aplicaciones de escritorio.
Frameworks web basados en acciones vs.
frameworks web basados en componentes
En el plano del control
de las aplicaciones, los web frameworks pueden
dividirse en dos clases. Mientras que los frameworks web basados
en acciones (action-based) reproducen
el modelo de solicitud/respuesta (request/response) en el que se
basa HTTP, los web frameworks basados en componentes (component-based) prescinden
de él.
Frameworks web basados en acciones: en
los entornos de trabajo web basados en acciones, el controlador
constituye una instancia central que se hace cargo de las
solicitudes de los clientes, las valida y pone en marcha una
acción. Para cada posible acción, los desarrolladores de apps
tienen que crear previamente un objeto de software que contenga
la correspondiente lógica de la aplicación y dicho objeto puede,
por lo general, deducirse de clases abstractas.
Una vez finalizada la acción, el controlador
actualiza el modelo de datos y transmite el resultado a la
vista, que genera la respuesta y la manda de vuelta al cliente.
Los frameworks web basados en acciones se apoyan
en el patrón MVC y reciben la nomenclatura de “request-based”
debido a la estricta aplicación del esquema request/response.
Sus representantes clásicos son:
Debido a que los desarrolladores de aplicaciones
son los encargados de definir en detalle las posibles acciones
de los frameworks web basados en acciones, se habla de enfoque white
box. Este posibilita que los desarrolladores tengan más
margen de acción, aunque requiere una mejor comprensión de los
web frameworks correspondientes, ya que los desarrolladores son
los responsables de la creación de HTML, CSS y JavaScript.
Frameworks web basados en componentes: en
contraposición al enfoque controlado por acciones, los web
frameworks controlados por componentes prescinden del patrón
solicitud/respuesta (request/response) en el que se basa HTTP y
en el que la interfaz de usuario de una aplicación web es
contemplada como una recopilación de componentes. Para cada uno
de estos componentes, que están unidos del lado del servidor con
objetos de software, se definen determinadas reacciones durante
el desarrollo de la aplicación web. Estas dan lugar a ciertos
eventos que se resuelven por medio de una interacción del
usuario con los componentes. En este caso también se puede
hablar de frameworks web controlados por eventos. Sus
representantes clásicos son:
La idea básica que se esconde tras el enfoque
basado en componentes es la de agrupar acciones similares. El
componente AccountController representa,
por ejemplo, acciones como login, logout o getAccount.
Un objeto de software puede ser responsable de más de una acción
y, a este respecto, los web frameworks basados en componentes
ofrecen, por lo general, una gran selección de componentes
reutilizables que ocultan los detalles del esquema request/response
a los desarrolladores de apps. En este contexto se puede hablar
de black
box. Este tipo de frameworks web son apropiados para
los desarrolladores que quieren basarse, en primer lugar, en
componentes predefinidos.
Quien quiera tener mayores libertades con
respecto a HTTP, HTML, CSS y JavaScript, es más conveniente que
opte por los web frameworks basados en acciones