¿Por qué?
|
|
|
Interfaces Gráficos de Usuario
|
|
|
¿Qué?
Modelo/Vista/Controlador
Participante | Responsabilidad | Colaboración |
---|---|---|
Modelo |
|
|
Presentador del Modelo |
|
|
Vista |
|
|
Controlador |
|
¿Para qué?
|
|
|
Interfaces Gráficos de Usuario | |
---|---|
|
|
Proceso de Desarrollo Software | |
---|---|
|
|
|
|
¿Cómo?
Modelo/Vista/Controlador
Evolución
|
|
-
Baile de la Tríada
Mike Potel de Taligent Inc en 1991 |
|
Motivación |
Propósito |
|
|
Participante | Responsabilidad |
---|---|
Modelo |
manejar los datos y la funcionalidad del negocio |
Vista |
manejar los controles de interfaz y minimizando el estado, lógica y sincronización de la presentación |
Presentador |
|
Modelo/Vista/Presentador con Presentador del Modelo
Autor |
Martin Fowler |
Fecha |
|
Motivación |
|
||
Propósito |
Desacoplar al Presentador de la Vista |
Participante | Responsabilidad |
---|---|
Modelo |
manejar los datos y la funcionalidad del negocio |
Vista |
manejar los controles de interfaz, la sincronización de la presentación pero eliminando el estado y la lógica de la presentación |
Presentador |
manejar la totalidad del estado y lógica de la presentación |
Modelo/Vista/Vista-Modelo
Autor |
Microsoft |
Fecha |
2004 |
Motivación |
|
||
Propósito |
Incorporar el enlace de datos automático (data binding) |
Modelo/Vista/Presentador con Vista Pasiva
Autor |
Martin Fowler |
Fecha |
|
Motivación |
|
||
Propósito |
Reducir la Vista a la minima expression sin lógica de presentación ni estado ni sincronización únicamente la gestión de controles de interfaz |
Participante | Responsabilidad |
---|---|
Modelo |
manejar los datos y la funcionalidad del negocio |
Vista |
manejar los controles de interfaz y eliminando el estado, lógica y sincronización de la presentación: Vista Pasiva |
Presentador |
manejar la totalidad del estado y lógica de la presentación |
Modelo/Vista/Presentador con Controlador Supervisor
Autor |
Martin Fowler |
Fecha |
|
Motivación |
|
||
Propósito |
Repartir, respecto a MVP-VP, el estado, la lógica y la sincronización entre la Vista, lo sencillo, y el Presentador, lo complejo |
Participante | Responsabilidad |
---|---|
Modelo |
manejar los datos y la funcionalidad del negocio |
Vista |
manejar los controles de interfaz y tareas sencillas e inmediatas de estado, lógica y sincronización de la presentación |
Presentador |
traeas complejas del estado, lógica y sincronización de la presentación |
Resumen
Estilos Arquitectónicos | |
---|---|
Modelo/Vista/Presentador con Presentador del Modelo |
Modelo/Vista/Vista-Modelo |
Modelo/Vista/Presentador con Vista Pasiva |
Modelo/Vista/Presentador con Controlador Supervisor |
Diseño de la Arquitectura Software
Requisitos
Modelo del Dominio |
Modelo de Casos de Uso |
|
|
Prototipo de la Interfaz de Usuario Gráfcia/Consola/… del Usuario |
Protocolo de la Interfaz de Comunicaciones con otros Sistemas que atacan al nuestro Sistema |
|
|
Análisis de la Arquitectura Software
|
|
|
|
Diseño de la Arquitectura Software
Comprensión profunda sobre los aspectos de los requisitos no funcionales y limitaciones relacionadas con: |
|
|
|
|
|
|
|
|
|
|
Frameworks
Web con Múltiples páginas con MVC
|
Java Enterprise Edition (JEE): |
---|
El navegador presenta un página HTML para que un cliente rellene un formulario y pulse el botón de enviar |
El botón lleva asociado la URL del Servlet-Controlador que corresponde ejecutar y junto con los datos del formulario conforman la trama HTTP que se envía al servidor web |
Éste localiza el Servlet-Controlador correspondiente a la URL y le pasa la petición (Request-Evento) y la respuesta (Response) |
El Servlet-Controlador extrae los parámetros del Request-Evento, opera sobre los DAO para acceder a los Beans-Modelos y los trata según la funcionalidad del Servlet-Controlador para almacenarlos en la sesión |
El Servlet-Controlador cede la ejecución al Java Server Page-View que combina HTML y sentencias de Java para la sincronización y lógica de presentación a partir de los datos obtenidos del estado de los Beans-Modelos accesibles desde la sesión |
El Java Server Page-Vista se transforma en la siguiente página HTML a devolver en la respuesta (Response) al navegador que lo solicitó |
Web con Múltiples páginas con MVP-PV
|
Symphony (PHP): |
---|
El navegador presenta un página HTML para que un cliente rellene un formulario y pulse el botón de enviar |
El botón lleva asociado la URL del Controlador-Presentador que corresponde ejecutar y junto con los datos del formulario conforman la trama HTTP que se envía al servidor web |
Éste localiza el Controlador-Presentador correspondiente a la URL y le pasa la petición (Request-Evento) y la respuesta (Response) |
El Controlador-Presentador extrae los parámetros del Request-Evento, opera sobre los DAO para acceder a los Modelos-Modelos y los trata según la funcionalidad del Controlador-Presentador para almacenarlos en la sesión |
El Controlador-Presentador aplica la lógica y sincroniza inyectando todos los valores del estado necesarios seggún la lógica de la presentación del Twig-Vista |
El Twig-Vista es una plantilla orientada a diseñadores, no programadores, que acepta los valores del Controlador-Presentador |
El Twig-Vista se transforma en la siguiente página HTML a devolver en la respuesta (Response) al navegador que lo solicitó |
Web con Múltiples páginas con MVP-SC
|
Spring con FrontPage : |
---|
El navegador presenta un página HTML para que un cliente rellene un formulario y pulse el botón de enviar |
El botón lleva asociado la URL del Controlador-Presentador que corresponde ejecutar y junto con los datos del formulario conforman la trama HTTP que se envía al servidor web |
Éste localiza el Controlador-Presentador correspondiente a la URL y le pasa la petición (Request-Evento) y la respuesta (Response) |
El Controlador-Presentador extrae los parámetros del Request-Evento, opera sobre los DAO para acceder a los Modelos-Modelos y los trata según la funcionalidad del Controlador-Presentador para almacenarlos en la sesión con la lógica compleja |
El Controlador-Presentador cede la ejecución al JSP-View que combina HTML y sentencias de Java para la sincronización y lógica sencilla a partir de los datos obtenidos del estado de los Modelos-Modelos accesibles desde la sesión |
El JSP-Vista se transforma en la siguiente página HTML a devolver en la respuesta (Response) al navegador que lo solicitó |
Web con Múltiples páginas con MVP-PM
|
Java Server Face : |
---|
El navegador presenta un página HTML para que un cliente rellene un formulario y pulse el botón de enviar |
El botón lleva asociado la URL del Bean-Presentador que corresponde ejecutar y junto con los datos del formulario conforman la trama HTTP que se envía al servidor web |
Éste localiza el Bean-Presentador correspondiente a la URL y le pasa la petición (Request-Evento) y la respuesta (Response) |
El Bean-Presentador extrae los parámetros del Request-Evento, opera sobre los DAO para acceder a los Modelos-Modelos y los trata según la funcionalidad del Bean-Presentador junto con la lógica compleja para la presentación |
El Bean-Presentador cede la ejecución al XHTML-View que combina HTML y acceso para la sincronización y lógica sencilla de presentación a partir de los valores del Bean-Presentador |
El XHTML-Vista se transforma en la siguiente página HTML a devolver en la respuesta (Response) al navegador que lo solicitó |
Web con Múltiples Páginas con MVVM
|
.Net (C#) : |
---|
El navegador presenta un página HTML para que un cliente rellene un formulario y pulse el botón de enviar |
El botón lleva asociado la URL del Vista-Modelo-Vista-Modelo que corresponde ejecutar y junto con los datos del formulario conforman la trama HTTP que se envía al servidor web |
Éste localiza el Vista-Modelo-Vista-Modelo correspondiente a la URL y le pasa la petición (Request-Evento) y la respuesta (Response) |
El Vista-Modelo-Vista-Modelo extrae los parámetros del Request-Evento, opera sobre los DAO para acceder a los Modelos-Modelos y los trata según la funcionalidad del Vista-Modelo-Vista-Modelo junto con la lógica para la presentación |
El Vista-Modelo-Vista-Modelo cede la ejecución al XAML-View que es una plantilla que combina "HTML" y se sincroniza mediante DataBinding con el Vista-Modelo-Vista-Modelo |
El XAML-Vista se transforma en la siguiente página HTML a devolver en la respuesta (Response) al navegador que lo solicitó |
REST con MVC en Servidor
|
Spring/JEE : |
---|
Un cliente web/móvil, mediante tecnología AJAX/RespTemplate realiza una petición HTTP con la URL del recurso, operación y parámetros oportunos para confrontar la trama HTTP que se envía al servidor Web |
Éste localiza el Recurso-Controlador correspondiente a la URL y le pasa la petición (Request-Evento) y la respuesta (Response) |
El Recurso-Controlador extrae los parámetros del Request-Evento, opera sobre los DAO para acceder a los Modelos-Modelos y los trata según la funcionalidad del Recurso-Controlador |
El Recurso-Controlador construye el Data Transfer Object-Vista oportuna que se rellena con los valores de los Modelos-Modelos suministrados por el Recurso-Controlador |
El Data Transfer Object-Vista se transforma en JSON/XML a devolver en la respuesta (Response) al navegador que lo solicitó |
Web con Única página con MVVM en Cliente
|
Angular.js (JavaScript) : |
---|
El navegador presenta un página HTML para que un cliente rellene un formulario y pulse el botón de enviar |
El botón lleva asociado la URL del Controlador-Vista-Modelo que corresponde ejecutar |
El Controlador-Vista-Modelo, mediante tecnología AJAX realiza las peticiones HTTP contra el servidor REST para acceder a sus Modelos-Modelos a partir del JSON/XML retornado (que a su vez era el Data Transfer Object-Vista del servidor) |
Trata los Modelos-Modelos según la funcionalidad del Controlador-Vista-Modelo junto con la lógica compleja para la presentación |
El Controlador-Vista-Modelo cede la ejecución al HTML-View que contiene directivas para la sincronización mediante DataBinding con el Controlador-Vista-Modelo |
El HTML-View transforma el árbol DOM para la siguiente HTML |
Móvil con MVP-PV en Cliente
|
Angular.js (JavaScript) : |
---|
El móvil presenta una pantalla para que un cliente rellene un formulario y pulse el botón de enviar |
El botón lleva asociado la operación del Activity-Presentador que corresponde ejecutar |
El Activity-Presentador, mediante tecnología RestTemplate realiza las peticiones HTTP contra el servidor REST para acceder a sus Modelos-Modelos a partir del JSON/XML retornado (que a su vez era la Vista-Vista en el servidor) |
Trata los Modelos-Modelos según la funcionalidad del Activity-Presentador junto con la lógica compleja para la presentación |
El Activity-Presentador se sincroniza con el XML-View inyectando los valores necesarios para la presentación |
El XML-View se actualiza en pantalla |
Arquitectura Ágiles
Año | Autor | Publicación | Referencia |
---|---|---|---|
2009 |
M. Fowler |
Flaccid Scrum |
|
2014 |
D. Thomas |
Agile is dead, long live agility |
|
2018 |
R. Jeffiers |
Scrum is not an Agile Software Development Framework |
|
2018 |
R. Jeffiers |
Developers Should Abandon Agile |
Arquitectura Hexagonal | Arquitectura en Cebollá | Arquitectura Limpia |
---|---|---|
|
|
|
Arquitectura Hexagonal
Alistair Cockburn, antropólogo de proyectos | |
---|---|
|
|
|
|
Nombre | Intención | Propósito |
---|---|---|
|
|
|
Beneficio | ||
---|---|---|
|
|
|
|
|
|
|
|
Actor, Adaptador y Puerto primario, director, izquierdo y superior, API del lado del usuario | Actor, Adaptador y Puerto secundario, dirigido, derecho, inferior, API del lado de los datos | ||||||
---|---|---|---|---|---|---|---|
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import fit.ColumnFixture; public class TestDiscounter extends ColumnFixture { private Discounter app = new Discounter( RepositoryFactory .getMockRateRepository()); public double amount; public double discount() { return app.discount(amount); (1) } }
|
import repository.RepositoryFactory; import repository.RateRepository; public class Discounter { private RateRepository rateRepository; public Discounter(RateRepository r) {(1) super(); rateRepository = r; } public double discount(double amount){(2) double rate = rateRepository.getRate( amount ); return amount * rate; } }
|
||||||
Discounter app = new Discounter( RepositoryFactory.getRateRepository()); public void actionPerformed (ActionEvent event){ ... String amountStr = text1.getText(); double amount = Double.parseDouble(amountStr); discount = app.discount(amount));(1) text3.setText( "" + discount ); ... }
|
import app.Discounter; import fit.ColumnFixture; public class TestDiscounter extends ColumnFixture { private Discounter app = new Discounter( RepositoryFactory .getMockRateRepository()); public double amount; public double discount() { return app.discount( amount);(1) } }
|
||||||
|
|
La asimetría a usar no es | sino |
---|---|
|
|
Aplicación: TicTacToe | Solución: java |
---|
El hexágono no es un hexágono por que el número seis es importante | |
---|---|
|
|
Lo que exactamente es y no es un puerto es en gran medida una cuestión de gustos | |
---|---|
|
|
The ‘’Pedestal’’ pattern | |
---|---|
|
|
|
Arquitectura en Cebollá
Jeffrey Palermo | |
---|---|
|
Arquitectura Tradicional | Arquitectura en Cebollá |
---|---|
|
|
|
|
|
|
|
Arquitectura Limpia
Robert Cecil Martin, Tio Bob, preguntame lo que sea!!! | |
---|---|
|
|
|
|
|
|
|
Valores y principios ágiles para una nueva generación “En el viaje hacia todas las cosas ágiles, el tío Bob ha estado allí, lo ha hecho y tiene tanto la camiseta como las cicatrices para mostrarlo. Este delicioso libro es en parte historia, en parte historias personales y toda sabiduría. Si quieres entender qué es Agile y cómo llegó a ser, este es el libro para ti
— Grady Booch
|
La frustración de Bob tiñe cada frase de Clean Agile, pero es una frustración justificada. Lo que hay en el mundo del desarrollo ágil no es nada comparado con lo que podría ser. Este libro es la perspectiva de Bob sobre en qué enfocarse para llegar a 'lo que podría ser'. Y él ha estado allí, así que vale la pena escucharlo
— Kent Beck
|
Los Principios son [… SOLID …] Aunque se presentan aquí como principios de diseño orientado a objetos, en realidad son casos especiales de principios de la ingeniería de software asentados hace tiempo
— Uncle Bob
|
El Principio de Única Responsabilidad. Este principio se describió en el trabajo de Tom DeMarco y Meilir Page-Jones. Lo llamaron cohesión
— Uncle Bob
|
El Principio de Inversión de Dependencias. En esta columna, discutimos las implicaciones estructurales del OCP y el LSP. La estructura que resulta del uso riguroso de estos principios puede generalizarse en un principio por sí solo. Lo llamo "El principio de inversión de dependencia" (DIP)
— Uncle Bob
|
|
|
|
|
|
|
|
Sintesis
Bibliografía
Obra, Autor y Edición | Portada | Obra, Autor y Edición | Portada |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ponente
|
|
|