This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
wiki:arquitectura_modelo-vista-controlador_o_mvc [2024/10/15 22:14] – created admin | wiki:arquitectura_modelo-vista-controlador_o_mvc [2024/10/17 23:22] (current) – admin | ||
---|---|---|---|
Line 11: | Line 11: | ||
* Modelo: clases que almacenan los datos manipulados por la aplicación y que están relacionados con el dominio del sistema en construcción. Así, las clases de Modelo no tienen ningún conocimiento ni dependencia con las clases de Vista y Controladores. Además de datos, las clases de Modelo pueden contener métodos que alteran el estado de los objetos de dominio. | * Modelo: clases que almacenan los datos manipulados por la aplicación y que están relacionados con el dominio del sistema en construcción. Así, las clases de Modelo no tienen ningún conocimiento ni dependencia con las clases de Vista y Controladores. Además de datos, las clases de Modelo pueden contener métodos que alteran el estado de los objetos de dominio. | ||
- | Por lo tanto, en una arquitectura MVC, la interfaz gráfica está formada por objetos de Vista y por Controladores. Sin embargo, en muchos sistemas no existe una distinción clara entre Vista y Controladores. Según Fowler (link, página 331), incluso la mayoría de las versiones de Smalltalk no separan estos dos componentes. Por eso, es más fácil entenderlo de la siguiente manera: | + | Pregunta Frecuente: ¿Cuál es la diferencia entre MVC y tres capas? La respuesta será un poco extensa y nos basaremos en la evolución histórica de estas arquitecturas: |
+ | |||
+ | Como comentamos, MVC surgió a finales de la década de los 70, para ayudar en la construcción de interfaces gráficas. Es decir, aplicaciones que incluyen una interfaz con ventanas, botones, cuadros de texto, etc. Como ejemplo, podemos mencionar un paquete de oficina con aplicaciones como Word, Excel y PowerPoint, en el caso del sistema operativo Windows. | ||
+ | |||
+ | En la década de los 90, las tecnologías de redes, sistemas distribuidos y bases de datos se volvieron comunes. Entonces, se hizo posible la construcción de aplicaciones distribuidas con tres capas. En este caso, MVC puede usarse en la implementación de la capa de interfaz, que puede ser, por ejemplo, una aplicación nativa en Windows, implementada utilizando lenguajes como Visual Basic o Java (en este último caso, usando frameworks como Swing). En resumen, la aplicación, | ||
+ | |||
+ | A principios de los años 2000, la Web se popularizó y la interfaz de las aplicaciones migró a HTML y, posteriormente, | ||
+ | |||
+ | Por lo tanto, en una arquitectura MVC, la interfaz gráfica está formada por objetos de Vista y por Controladores. Sin embargo, en muchos sistemas no existe una distinción clara entre Vista y Controladores. Según Fowler ([[https:// | ||
MVC = (Vista + Controladores) + Modelo = Interfaz Gráfica + Modelo | MVC = (Vista + Controladores) + Modelo = Interfaz Gráfica + Modelo | ||
+ | |||
La siguiente figura muestra las dependencias entre las clases de una arquitectura MVC. La figura refuerza que la interfaz gráfica está compuesta por la Vista y los Controladores. También podemos observar que la Interfaz Gráfica puede depender del Modelo. Sin embargo, las clases de Modelo no tienen dependencias con las clases de la Interfaz Gráfica. En realidad, podemos entender la Interfaz Gráfica como un observador del Modelo. Cuando el estado de los objetos del Modelo cambia, la interfaz del sistema debe actualizarse automáticamente. | La siguiente figura muestra las dependencias entre las clases de una arquitectura MVC. La figura refuerza que la interfaz gráfica está compuesta por la Vista y los Controladores. También podemos observar que la Interfaz Gráfica puede depender del Modelo. Sin embargo, las clases de Modelo no tienen dependencias con las clases de la Interfaz Gráfica. En realidad, podemos entender la Interfaz Gráfica como un observador del Modelo. Cuando el estado de los objetos del Modelo cambia, la interfaz del sistema debe actualizarse automáticamente. | ||
+ | |||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | Entre las ventajas de las arquitecturas MVC, podemos citar: | ||
+ | |||
+ | * MVC favorece la especialización del trabajo de desarrollo. Por ejemplo, se puede contar con desarrolladores especializados en la implementación de interfaces gráficas, quienes son llamados desarrolladores de front-end. Por otro lado, los desarrolladores de clases de Modelo no necesitan conocer ni implementar código de interfaz con los usuarios. | ||
+ | |||
+ | * MVC permite que las clases de Modelo sean usadas por diferentes Vistas, como se ilustra en la siguiente figura. En este ejemplo, un objeto de Modelo almacena dos valores: horas y minutos. Estos datos se presentan en dos vistas diferentes. En la primera, como un reloj analógico. En la segunda, como un reloj digital. | ||
+ | |||
+ | * MVC favorece la capacidad de prueba. Es más fácil probar objetos no visuales, es decir, aquellos que no están relacionados con la implementación de interfaces gráficas. Por eso, al separar los objetos de presentación de los objetos de Modelo, se facilita la prueba de estos últimos. | ||
+ | |||
+ | < | ||
+ | <color black>El corazón y la parte más valiosa de MVC está en la separación entre el código de la interfaz con el usuario (la Vista, también llamada presentación) y la lógica de dominio (el Modelo). Las clases de presentación implementan únicamente la lógica necesaria para manejar la interfaz de usuario. Por otro lado, los objetos de dominio no incluyen código visual, solo lógica de negocio. Esto separa dos partes complejas de los sistemas de software en partes que son más fáciles de modificar. También permite múltiples presentaciones de la misma lógica de negocio. < | ||
+ | </ | ||
+ | |||
+ | **Pregunta Frecuente: ¿Cuál es la diferencia entre MVC y tres capas? La respuesta será un poco extensa y nos basaremos en la evolución histórica de estas arquitecturas: | ||
+ | ** | ||
+ | |||
+ | * MVC surgió a finales de la década de los 70, para ayudar en la construcción de interfaces gráficas. Es decir, aplicaciones que incluyen una interfaz con ventanas, botones, cuadros de texto, etc. Como ejemplo, podemos mencionar un paquete de oficina con aplicaciones como Word, Excel y PowerPoint, en el caso del sistema operativo Windows. | ||
+ | |||
+ | * En la década de los 90, las tecnologías de redes, sistemas distribuidos y bases de datos se volvieron comunes. Entonces, se hizo posible la construcción de aplicaciones distribuidas con tres capas. En este caso, MVC puede usarse en la implementación de la capa de interfaz, que puede ser, por ejemplo, una aplicación nativa en Windows, implementada utilizando lenguajes como Visual Basic o Java (en este último caso, usando frameworks como Swing). En resumen, la aplicación, | ||
+ | |||
+ | * A principios de los años 2000, la Web se popularizó y la interfaz de las aplicaciones migró a HTML y, posteriormente, | ||
+ | |||
+ | Entonces, a pesar de que los sistemas web se parecen a los sistemas de tres capas, los frameworks web más populares optaron por usar términos típicos de MVC para nombrar sus componentes. Por lo tanto, la mejor manera de responder a la pregunta es afirmar que existen dos vertientes de sistemas MVC: la vertiente clásica, que surgió con Smalltalk-80, | ||
+ | |||
+ | |||
+ | ===== Ejemplo Arquitectura MVC ===== | ||
+ | |||
+ | ==== Configuracion ==== | ||
+ | |||
+ | |||
+ | Para el siguiente ejemplo usaremos una arquitectura física de tres capas: cliente web (browser como firefox, chrome, etc.), servidor de aplicaciones (wildfly) y un servidor de base de datos (postgresql). Para configurar esta arquitectura usaremos contenedores creados con docker. | ||
+ | |||
+ | - Instalación de Docker: La instalación dependerá del sistema operativo a ser utilizado. La documentación y los binarios para SO Windows los podrán encontrar en el siguiente link: [[https:// | ||
+ | - Creación de una red interna: Deberemos crear una red de datos interna para la comunicación entre los dos contenedores (wildfly y postgresql) con el siguiente comando; '' | ||
+ | - Creación del contenedor posgtresql: Para la creación del contenedor, usaremos la imagen oficial ([[https:// | ||
+ | - Creación del usuario '' | ||
+ | |||
+ | <code sql> | ||
+ | CREATE USER sa WITH PASSWORD ' | ||
+ | |||
+ | CREATE DATABASE banco OWNER sa; | ||
+ | |||
+ | ALTER DATABASE banco OWNER TO sa; | ||
+ | |||
+ | |||
+ | </ | ||
+ | - Creación del contenedor wildfly: Para la creación del contenedor, usaremos la imagen oficial | ||
+ | - Correr el contenedor wildfly: '' | ||
+ | - Ingresar al sitio: http:// | ||
+ | |||
+ | |||
+ | También es posible obtener las imágenes creadas para postgresql y wildfly desde este enlace [[https:// | ||
+ | |||
+ | |||
+ | |||
+ | ==== Proyecto bancoapp ==== | ||
+ | |||
+ | El proyecto bancoapp [[https:// | ||
+ | |||
+ | En este caso en particular, '' | ||
+ | |||
+ | La gestión de la configuración para este proyecto está a cargo Apache - Maven ([[https:// | ||
+ | |||
+ | La compilación del proyecto la realizaremos en un terminal de Intellij con el siguiente comando: '' | ||
+ | |||
+ |