ALGORITMO Y ESTRUCTURA DE DATOS II

 

Synfony 2 Struct 2 Pytohn Django Volver

Framework

 

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 probadas, 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-basedreproducen el modelo de solicitud/respuesta (request/response) en el que se basa HTTP, los web frameworks basados en componentes (component-basedprescinden 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 loginlogout 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

 

Volver