Framework
# Framework

Un entorno de trabajo (del inglés framework) o marco de trabajo es un conjunto estandarizado de conceptos, prácticas y criterios para enfocar un tipo de problemática particular que sirve como referencia, para enfrentar y resolver nuevos problemas de índole similar.

En el desarrollo de software, un entorno de trabajo es una estructura conceptual y tecnológica de asistencia definida, normalmente, con artefactos o módulos concretos de software, que puede servir de base para la organización y desarrollo de software. Típicamente, puede incluir soporte de programas, bibliotecas, y un lenguaje interpretado, entre otras herramientas, para así ayudar a desarrollar y unir los diferentes componentes de un proyecto.

Representa una arquitectura de software que modela las relaciones generales de las entidades del dominio, y provee una estructura y una especial metodología de trabajo, la cual extiende o utiliza las aplicaciones del dominio.

## Introducción

Los marcos de trabajo tienen como objetivo principal ofrecer una funcionalidad definida, auto contenida, siendo construidos usando patrones de diseño, y su característica principal es su alta cohesión y bajo acoplamiento.

Para acceder a esa funcionalidad, se construyen piezas, objetos, llamados objetos calientes, que vinculan las necesidades del sistema con la funcionalidad que este presta.

Esta funcionalidad, está constituida por objetos llamados fríos, que sufren poco o ningún cambio en la vida del framework, permitiendo la portabilidad entre distintos sistemas.

Algunos entornos de trabajo conocidos son Spring Framework o Hibernate, donde lo esencial para ser denominados entornos de trabajo es estar constituidos por objetos casi estáticos con funcionalidad definida a nivel grupo de objetos y no como parte constitutiva de estos, por ejemplo en sus métodos, en cuyo caso se habla de una API o librería.

Algunas características notables que se pueden observar:

* La inversión de control: en un framework, a diferencia de las bibliotecas, el flujo de control no es dictado por el programa que llama, sino por el mismo.
* La funcionalidad o comportamiento predeterminado: un marco tiene un comportamiento predeterminado. Este comportamiento por defecto debe ser un comportamiento útil, definido e identificable.
* Su escalabilidad: un marco puede ser ampliado para proporcionar una funcionalidad específica. El frame, en general, no se supone que deba ser modificado, excepto en cuanto a extensibilidad. Los usuarios pueden ampliar sus características, pero no deben ni necesitan modificar su código.

## Básicos

No es más que una base de programación que atiende a sus descendientes (manejado de una forma estructural o en cascada), posibilitando cualquier respuesta ante las necesidades de sus miembros, o en secciones de una aplicación (web), satisfaciendo así las necesidades más comunes del programador.

### Arquitectura

Dentro de este aspecto, podemos basarnos en el modelo-vista-controlador, ya que debemos fragmentar nuestra programación. Tenemos que contemplar estos aspectos básicos en cuanto a la implementación de nuestro sistema:

**Modelo**


    Este miembro del controlador maneja las operaciones lógicas, y de manejo de información (previamente enviada por su ancestro), para resultar de una forma explicable y sin titubeos. Cada miembro debe ser meticulosamente llamado, con su correcto nombre y en principio, con su verdadera naturaleza: el manejo de información, su complementación directa.

**Vista**


    Al final, a este miembro de la familia le corresponde dibujar, o expresar la última forma de los datos: la interfaz gráfica que interactúa con el usuario final del programa (GUI). Después de todo, a este miembro le toca evidenciar la información obtenida hasta hacerla llegar al controlador. Solo (e inicialmente), nos espera demostrar la información.

**Controlador**


    Con este apartado podemos controlar el acceso (incluso todo) a nuestra aplicación, y esto puede incluir: archivos, scripts, o programas; cualquier tipo de información que permita la interfaz. Así, podremos diversificar nuestro contenido de forma dinámica, y estática (a la vez); pues, solo debemos controlar ciertos aspectos (como se ha mencionado antes).

### Estructura

Dentro del controlador, modelo o vista, se pueden manejar datos, y depende de cada uno cómo interpretar y manejar esos datos. Se sabe que el único dato de una dirección estática web es: conseguir un archivo físico en el disco duro o de Internet, etc., e interpretado o no, el servidor responde.

El modelo, al igual que el controlador y la vista, maneja todos los datos que se relacionen consigo (solo es el proceso medio de la separación por capas que ofrece la arquitectura MVC). Y solo la vista, puede demostrar dicha información. Con lo cual ya se ha generado la jerarquía del programa: controlador, modelo y vista.

## Lógica

Al parecer, debemos inyectar ciertos objetos dentro de sus parientes en esta aplicación, solo así compartirán herencia y coherencia en su aplicación.

Rápidamente, para una aplicación web sencilla debemos establecer estos objetos:

* Una base (MVC)
   * Controlador: este debe ser capaz de manejar rutas, archivos, clases, métodos y funciones.
   * Modelo: es como un script habitual en el servidor, solo que agrupado bajo un modelo reutilizable.
   * Vista: como incluyendo cualquier archivo en nuestra ejecución, muy simple.
* Un sistema
   * Ruteador: con él podemos dividir nuestras peticiones sin tantas condicionales.
   * Cargador
