Este documento presenta el patrón Action-Domain-Responder (ADR) como una alternativa al patrón MVC tradicional para aplicaciones web. ADR separa las responsabilidades en acciones, dominio y respuesta. Las acciones gestionan las peticiones, el dominio contiene la lógica del negocio y el responder genera la respuesta. ADR tiene ventajas como una separación más clara de responsabilidades, clases más pequeñas y testeables, y favorece el uso de patrones de diseño y principios SOLID.
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserMicael Gallego
Slides de la charla en el MadridJUG sobre TypeScript y su parecido con Java. Se presentan los parecidos entre estos dos lenguajes y sus diferencias más notables.
¿Cómo poner software de calidad en manos del usuario de forma rápida?Micael Gallego
Ciclo de vida del software, repositorios de código, análisis estático de código, pruebas software, integración continua, entrega continua, despliegue continuo, DevOps.
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserMicael Gallego
Slides de la charla en el MadridJUG sobre TypeScript y su parecido con Java. Se presentan los parecidos entre estos dos lenguajes y sus diferencias más notables.
¿Cómo poner software de calidad en manos del usuario de forma rápida?Micael Gallego
Ciclo de vida del software, repositorios de código, análisis estático de código, pruebas software, integración continua, entrega continua, despliegue continuo, DevOps.
Como ser mas productivo en el desarrollo de aplicacionesMicael Gallego
Charla impartida en la Universidad Politécnica de Madrid presentando algunas técnicas y herramientas para ser más productivo en el desarrollo de aplicaciones
Transparencias de la charla con la que participamos en las III Jornadas de Java de Alicante.
En las transparencias se muestran algunas herramientas para implantar metodologías ágiles en Java y se comentan algunas anécdotas e historias de diferentes implantaciones.
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?Micael Gallego
Charla del 12 de Marzo de 2014 en el MadridJUG, el grupo de usuarios de Java de Madrid. En ella se presentó JavaScript desde el punto de vista de un programador Java que se adentra en ese maravilloso mundo.
This is the presentation we gave at Spring 2GX Madrid. It shows how Grails helped us to improve our productivity and why Grails is not that bounded to Groovy and how it can be an outstanding alternative if you are a 100% Java company.
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!Iván López Martín
Groovy es un lenguaje dinámico para la JVM y la evolución natural para un programador Java debido a su baja curva de aprendizaje.
Si quieres saber por qué programar con Groovy es una Hora de Aventuras, esta es tu charla. Aprenderás a través de ejemplos las principales características que hacen de Groovy un lenguaje tan potente y versatil: tipado dinámico, closures, manejo de listas y mapas, power asserts, builders, metaprogramación, scripting, DSL's, transformaciones AST y muchas más.
Te aseguro que después de ella tendrás ganas de profundizar y utilizarlo en tu día a día.
El proceso de desarrollo de software involucra una gran cantidad de recursos, la elección de dichos recursos sin duda puede ayudarnos a marcar la diferencia en el resultado final.
Estos recursos pueden ser de muchos tipos, en este webminar nos enfocaremos a herramientas de software que nos permitirán mejorar nuestro proceso de desarrollo, aprovechando los beneficios del modelo openSource.
Veremos algunos criterios para elegir la herramientas de construcción, IDE de desarrollo, frameworks de testing, así como herramientas para integrar continuamente el código, así como herramientas para generar métricas.
Dev Tools para Kubernetes - Codemotion 2019Micael Gallego
Charla impartida entre Pablo Chico y Micael Gallego en la que se muestran algunas herramientas para mejorar la experiencia de desarrollo de aplicaciones cloud native para Kubernetes. Concretamente, se presenta cómo okteto puede reducir el tiempo empleado en el ciclo de change, build, push, deploy de pods Java en Kubernetes usando la sincronización de ficheros.
Ejemplos de código en https://github.com/micaelgallego/k8s-dev-tools-codemo19
Esta charla pretende ser una guía espiritual para todo aquel se adentre en las oscuras artes de la migración de un proyecto real de Objective-C a Swift
La presentación está basada en nuestra propia experiencia de un año migrando la aplicación de idealista
Como ser mas productivo en el desarrollo de aplicacionesMicael Gallego
Charla impartida en la Universidad Politécnica de Madrid presentando algunas técnicas y herramientas para ser más productivo en el desarrollo de aplicaciones
Transparencias de la charla con la que participamos en las III Jornadas de Java de Alicante.
En las transparencias se muestran algunas herramientas para implantar metodologías ágiles en Java y se comentan algunas anécdotas e historias de diferentes implantaciones.
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?Micael Gallego
Charla del 12 de Marzo de 2014 en el MadridJUG, el grupo de usuarios de Java de Madrid. En ella se presentó JavaScript desde el punto de vista de un programador Java que se adentra en ese maravilloso mundo.
This is the presentation we gave at Spring 2GX Madrid. It shows how Grails helped us to improve our productivity and why Grails is not that bounded to Groovy and how it can be an outstanding alternative if you are a 100% Java company.
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!Iván López Martín
Groovy es un lenguaje dinámico para la JVM y la evolución natural para un programador Java debido a su baja curva de aprendizaje.
Si quieres saber por qué programar con Groovy es una Hora de Aventuras, esta es tu charla. Aprenderás a través de ejemplos las principales características que hacen de Groovy un lenguaje tan potente y versatil: tipado dinámico, closures, manejo de listas y mapas, power asserts, builders, metaprogramación, scripting, DSL's, transformaciones AST y muchas más.
Te aseguro que después de ella tendrás ganas de profundizar y utilizarlo en tu día a día.
El proceso de desarrollo de software involucra una gran cantidad de recursos, la elección de dichos recursos sin duda puede ayudarnos a marcar la diferencia en el resultado final.
Estos recursos pueden ser de muchos tipos, en este webminar nos enfocaremos a herramientas de software que nos permitirán mejorar nuestro proceso de desarrollo, aprovechando los beneficios del modelo openSource.
Veremos algunos criterios para elegir la herramientas de construcción, IDE de desarrollo, frameworks de testing, así como herramientas para integrar continuamente el código, así como herramientas para generar métricas.
Dev Tools para Kubernetes - Codemotion 2019Micael Gallego
Charla impartida entre Pablo Chico y Micael Gallego en la que se muestran algunas herramientas para mejorar la experiencia de desarrollo de aplicaciones cloud native para Kubernetes. Concretamente, se presenta cómo okteto puede reducir el tiempo empleado en el ciclo de change, build, push, deploy de pods Java en Kubernetes usando la sincronización de ficheros.
Ejemplos de código en https://github.com/micaelgallego/k8s-dev-tools-codemo19
Esta charla pretende ser una guía espiritual para todo aquel se adentre en las oscuras artes de la migración de un proyecto real de Objective-C a Swift
La presentación está basada en nuestra propia experiencia de un año migrando la aplicación de idealista
Web framework ligeros y micros en java barcamp 2014Carlos Camacho
Presentación enfocada a mostrar las funcionalidades más importante de los micro framework Spark y Ratpack. Dando una inducción a los conceptos básicos en su utilización del protocolo HTTP y los servicios REST.
Impartida en la segunda edición en el Barcamp 2014, Pontificia Universidad Católica Madre y Maestra (PUCMM), Santiago de los Caballeros, República Dominicana.
En esta sesión os contaremos la visión de React para el desarrollo de aplicaciones web desde el punto de vista de un desarrollador de ASP.NET que tiene que aprender a trabajar con estas nuevas tecnologías.
Cross development - React para desarrolladores de asp.netAlberto Diaz Martin
En esta sesión os contaremos la visión de React para el desarrollo de aplicaciones web desde el punto de vista de un desarrollador de ASP.NET que tiene que aprender a trabajar con estas nuevas tecnologías.
introducción al concepto de la nube nativa.
¿Qué significa ser Nube Nativa (Cloud native) y cómo podemos encaminar hacia ella?
Vistazo a la Nube Nativa sus principios y prácticas.
Laravel, es el framework PHP de código abierto de mayor aceptación actualmente para este lenguaje, y su simplicidad en la sintaxis, su elegancia en la escritura, su motor de plantillas incorporado, la potencia de composer y de artisan para su manejo y los complementos con los que cuenta, hacen que PHP que para muchos estaba empezando a quedarse en el olvido, vuelva a ser rescatado y sea ahora un lenguaje moderno, rápido, eficiente y profesional trabajado desde Laravel.
Seminario Spring Roo. Monitorización con Spring InsightParadigma Digital
Seminario sobre Spring Roo y monitorización con Spring Insight organizado por Paradigma Tecnologico y Javahispano, impartido en Madrid el 14 de octubre de 2010 por Federico Caro
Si bien los hospitales conjuntan a profesionales de salud que atienden a la población, existe un equipo de organización, coordinación y administración que permite que los cuidados clínicos se otorguen de manera constante y sin obstáculos.
Mario García Baltazar, director del área de Tecnología (TI) del Hospital Victoria La Salle, relató la manera en la que el departamento que él lidera, apoyado en Cirrus y Estela, brinda servicio a los clientes internos de la institución e impulsa una experiencia positiva en el paciente.
Conoce el Hospital Victoria La Salle
Ubicado en Ciudad Victoria, Tamaulipas, México
Inició operaciones en el 2016
Forma parte del Consorcio Mexicanos de Hospitales
Hospital de segundo nivel
21 habitaciones para estancia
31 camas censables
13 camillas
2 quirófanos
+174 integrantes en su plantilla
+120 equipos médicos de alta tecnología
+900 pacientes atendidos
Servicios de +20 especialidades
Módulos utilizados de Cirrus
HIS
EHR
ERP
Estela - Business Intelligence
Escaneo y eliminación de malware en el equiponicromante2000
El malware tiene muchas caras, y es que los programas maliciosos se reproducen en los ordenadores de diferentes formas. Ya se trate de virus, de programas espía o de troyanos, la presencia de software malicioso en los sistemas informáticos siempre debería evitarse. Aquí te muestro como trabaja un anti malware a la hora de analizar tu equipo
2. UN POCO SOBRE MÍ
● PHP Developer desde 2005.
● Miembro de PHP Valencia (anteriormente
SymfonyVLC) desde 2013.
● Senior Backend Developer en Wossom.
Anteriormente en Beroomers.com y Origo.by
● Tengo un blog sobre Clean Code!
○ https://medium.com/all-you-need-is-clean-code
● Podcaster en “Leyendo Ciencia Ficción”!
3. UN POCO SOBRE MÍ
Anteriormente me habrás visto en otras charlas en PHP Valencia como:
● Servicios Web REST (Breve introducción a REST)
○ http://www.slideshare.net/slaimer/introduccin-a-rest-symfonyvlc
○ https://www.youtube.com/watch?v=dWLuTVSMMfs
● ¿Qué es OAuth y cómo se implementa?
○ http://www.slideshare.net/slaimer/qu-es-eso-de-oauth
○ https://www.youtube.com/watch?v=KONIDG1wp4g
6. Patrón MVC - Introducción
● Los controladores son una de las 3 patas del patrón MVC
● MVC fue propuesto en 1979
● Tuvo un gran auge en los 90 y a principios de 2000
● Está pensado para su uso en aplicaciones de interfaz gráfica, donde cada
componente (botón, input, menú…) tiene asociada su triada MVC.
7. Patrón MVC - Introducción
● Los controladores son una de las 3 patas del patrón MVC
● MVC fue propuesto en 1979
● Tuvo un gran auge en los 90 y a principios de 2000
● Está pensado para su uso en aplicaciones de interfaz gráfica, donde cada
componente (botón, input, menú…) tiene asociada su triada MVC.
8. Patrón MVC - Componentes
● El Modelo es el actor principal, el que aglutina la lógica y actualiza el estado.
● La Vista es la parte visual de la aplicación, la representación final de los datos
y de las acciones del usuario.
● La misión del Controlador es ser un canal de comunicación entre la vista y el
modelo.
13. MVC en detalle
● En realidad, no es considerado un patrón arquitectónico, sino un patrón de
interfaz de usuario.
● Si revisamos la literatura disponible en el momento de su concepción,
siempre se hacen referencias a interacciones de usuario, elementos en
pantalla, dispositivos de entrada…
● No se plantea como un patrón global para gobernar toda la aplicación, cada
elemento en pantalla tiene su triada MVC
● Mediante un sistema de mensajería event/subscriber todos los elementos se
mantienen comunicados.
14. MVC en aplicaciones web server-side
● Una aplicación web server-side (monolítica) no sigue este flujo, ya que se
basa en peticiones HTTP.
● A cada petición que se hace se destruye y crea la interfaz gráfica
● No mantienen una interfaz “viva”.
15. SUN Microsystems y MODEL 2
● La primera referencia a MVC y server-side viene de mano de SUN
Microsystems, que se apropió del nombre de sus componentes para su
patrón MODEL 2.
● SUN reinterpretó a su manera cada una de las partes de MVC, y gracias a el
auge de Apache Struts, en el mundillo del desarrollo backend se asimilaron
los componentes MVC tal cual los había planteado MODEL 2
16. SUN Microsystems y Model 2
En 1999 se podía leer en JavaWorld un artículo introductorio de MODEL 2 la
siguiente recomendación:
Properly applied, the Model 2 architecture should result in the concentration of all of the processing logic in the hands
of the controller servlet, with the JSP pages responsible only for the view or presentation.
Esta recomendación cuajó bastante entre los desarrolladores, quedando así para
siempre confundido el concepto y el propósito de controlador MVC.
32. Problemas conocidos
● Contienen lógica de dominio.
● Difícilmente testeables, y si contienen lógica de dominio, la situación se
agrava (alta probabilidad de código duplicado).
33. Problemas conocidos
● Contienen lógica de dominio.
● Difícilmente testeables, y si contienen lógica de dominio, la situación se
agrava (alta probabilidad de código duplicado).
● Archivos enormes
34. Problemas conocidos
● Contienen lógica de dominio.
● Difícilmente testeables, y si contienen lógica de dominio, la situación se
agrava (alta probabilidad de código duplicado).
● Archivos enormes
● Configuraciones incrustadas (anotaciones)
35. Problemas conocidos
● Contienen lógica de dominio.
● Difícilmente testeables, y si contienen lógica de dominio, la situación se
agrava (alta probabilidad de código duplicado).
● Archivos enormes
● Configuraciones incrustadas (anotaciones)
● Difícil mantenimiento y peor crecimiento del proyecto
36. Problemas conocidos
● Contienen lógica de dominio.
● Difícilmente testeables, y si contienen lógica de dominio, la situación se
agrava (alta probabilidad de código duplicado).
● Archivos enormes
● Configuraciones incrustadas (anotaciones)
● Difícil mantenimiento y peor crecimiento del proyecto
● Curva de aprendizaje para nuevas incorporaciones
37. Problemas conocidos
● Contienen lógica de dominio.
● Difícilmente testeables, y si contienen lógica de dominio, la situación se
agrava (alta probabilidad de código duplicado).
● Archivos enormes
● Configuraciones incrustadas (anotaciones)
● Difícil mantenimiento y peor crecimiento del proyecto
● Curva de aprendizaje para nuevas incorporaciones
● No es SOLID
40. Breve Introducción
Propuesto por Paul M. Jones, ADR nace como una alternativa server-side “real” a
MVC, siendo un patrón pensado para aplicaciones de red en un entorno
Request/Response.
Esto es una ventaja considerable, teniendo en cuenta que la mayoría de
frameworks web actuales implementan este flujo Request/Response
41. Breve Introducción
No es complejo pasar de comprender MVC o MODEL 2 a comprender ADR, las
bases son las misma, pero con pequeñas adaptaciones que hacen que sea más
cómodo de mantener y de modelar nuestro sistema.
Veamos una comparación de los distintos componentes a continuación.
44. Model VS Domain
● Poca diferencia respecto al Modelo original
● Responder y Domain no interactúan nunca, a pesar de ello, el Responder
puede usar elementos de dominio como entidades o colecciones con fines de
presentación.
45. Model VS Domain
● Poca diferencia respecto al Modelo original
● Responder y Domain no interactúan nunca, a pesar de ello, el Responder
puede usar elementos de dominio como entidades o colecciones con fines de
presentación.
● El Domain no está concebido como una única clase que gestione la lógica.
46. Model VS Domain
● Poca diferencia respecto al Modelo original
● Responder y Domain no interactúan nunca, a pesar de ello, el Responder
puede usar elementos de dominio como entidades o colecciones con fines de
presentación.
● El Domain no está concebido como una única clase que gestione la lógica.
● La elección de nombre no es casual. Se pretende “forzar” al programador a
pensar en patrones propios de DDD como Application Service o Use Case
para modelar el dominio de la aplicación.
47. Model VS Domain
● Poca diferencia respecto al Modelo original
● Responder y Domain no interactúan nunca, a pesar de ello, el Responder
puede usar elementos de dominio como entidades o colecciones con fines de
presentación.
● El Domain no está concebido como una única clase que gestione la lógica.
● La elección de nombre no es casual. Se pretende “forzar” al programador a
pensar en patrones propios de DDD como Application Service o Use Case
para modelar el dominio de la aplicación.
● Cualquier acción que el sistema pueda ejecutar, pertenece a la capa de
dominio
49. View VS Responder
● En MVC clásico, el controlador es el encargado de generar el cuerpo de la
respuesta (bien serializando el contenido o renderizando una plantilla) y de
inyectarlo en la respuesta, manejando status code, cabeceras, cookies… etc.
50. View VS Responder
● En MVC clásico, el controlador es el encargado de generar el cuerpo de la
respuesta (bien serializando el contenido o renderizando una plantilla) y de
inyectarlo en la respuesta, manejando status code, cabeceras, cookies… etc.
● Para separar por completo lógica de presentación, ADR introduce el
Responder, el componente encargado de gestionar toda la creación de la
respuesta, quitándole dicha responsabilidad al controlador.
51. View VS Responder
● En MVC clásico, el controlador es el encargado de generar el cuerpo de la
respuesta (bien serializando el contenido o renderizando una plantilla) y de
inyectarlo en la respuesta, manejando status code, cabeceras, cookies… etc.
● Para separar por completo lógica de presentación, ADR introduce el
Responder, el componente encargado de gestionar toda la creación de la
respuesta, quitándole dicha responsabilidad al controlador.
● Un mismo responder debe de poder ser utilizado por más de un Action, no
consiste necesariamente en que haya una Responder por cada Action, sino en
que sea el Responder quien manipule la respuesta.
53. Controller VS Action
● Los controladores “MODEL 2/MVC” suelen tener varios métodos públicos que
corresponden a varias rutas/acciones.
54. Controller VS Action
● Los controladores “MODEL 2/MVC” suelen tener varios métodos públicos que
corresponden a varias rutas/acciones.
● Esto hace que la clase tenga dependencias muy variadas, que el constructor
reciba demasiadas dependencias o que el controlador requiera tener
directamente tener el container de dependencias.
55. Controller VS Action
● Los controladores “MODEL 2/MVC” suelen tener varios métodos públicos que
corresponden a varias rutas/acciones.
● Esto hace que la clase tenga dependencias muy variadas, que el constructor
reciba demasiadas dependencias o que el controlador requiera tener
directamente tener el container de dependencias.
● En ocasiones un mismo controlador hay acciones que devuelven contenido
en HTML y otras en XML/JSON o cualquier otro tipo de serializado.
Provocando que el controlador tenga aún más dependencias.
56. Controller VS Action
● Los actions de ADR en cambio, corresponden cada uno a una única acción.
57. Controller VS Action
● Los actions de ADR en cambio, corresponden cada uno a una única acción.
● Esto ya sucede en microframeworks como Slim, Silex, Hanami, Flask… donde
cada ruta se corresponde directamente con una closure o una clase
individual.
58. Controller VS Action
● Los actions de ADR en cambio, corresponden cada uno a una única acción.
● Esto ya sucede en microframeworks como Slim, Silex, Hanami, Flask… donde
cada ruta se corresponde directamente con una closure o una clase
individual.
● Un action interactúa con el dominio de la misma forma que un controlador
interactúa con el modelo, pero no interactúa con la vista: envía la información
al responder para que este sea el que haga su trabajo
59. Controller VS Action
● Los actions de ADR en cambio, corresponden cada uno a una única acción.
● Esto ya sucede en microframeworks como Slim, Silex, Hanami, Flask… donde
cada ruta se corresponde directamente con una closure o una clase
individual.
● Un action interactúa con el dominio de la misma forma que un controlador
interactúa con el modelo, pero no interactúa con la vista: envía la información
al responder para que este sea el que haga su trabajo
● Más allá de validar la request (método, cabeceras, parámetros, cookies o
autenticación), el resto queda delegado a domain y responder.
61. Ventajas de ADR frente a MVC
● Fuerte separación de responsabilidades
62. Ventajas de ADR frente a MVC
● Fuerte separación de responsabilidades
● Clases muy pequeñas
63. Ventajas de ADR frente a MVC
● Fuerte separación de responsabilidades
● Clases muy pequeñas
● Fácilmente testeable
64. Ventajas de ADR frente a MVC
● Fuerte separación de responsabilidades
● Clases muy pequeñas
● Fácilmente testeable
● Favorece al uso de patrones de comportamiento para modelar el dominio
65. Ventajas de ADR frente a MVC
● Fuerte separación de responsabilidades
● Clases muy pequeñas
● Fácilmente testeable
● Favorece al uso de patrones de comportamiento para modelar el dominio
● Contribuye al naming de clases, simplificando la comprensión del proyecto
66. Ventajas de ADR frente a MVC
● Fuerte separación de responsabilidades
● Clases muy pequeñas
● Fácilmente testeable
● Favorece al uso de patrones de comportamiento para modelar el dominio
● Contribuye al naming de clases, simplificando la comprensión del proyecto
67. Ventajas de ADR frente a MVC
● Fuerte separación de responsabilidades
● Clases muy pequeñas
● Fácilmente testeable
● Favorece al uso de patrones de comportamiento para modelar el dominio
● Contribuye al naming de clases, simplificando la comprensión del proyecto
● El añadir nuevos casos de uso es casi mecánico
68. Ventajas de ADR frente a MVC
● Fuerte separación de responsabilidades
● Clases muy pequeñas
● Fácilmente testeable
● Favorece al uso de patrones de comportamiento para modelar el dominio
● Contribuye al naming de clases, simplificando la comprensión del proyecto
● El añadir nuevos casos de uso es casi mecánico
● Anima a seguir principios SOLID y Clean Code
69. Show me the code!
https://github.com/mangelsnc/adr-blog
Hola, bienvenidos a la charla “Simplificando Controladores: Una introducción a Actión-Domain-Responder”
Mi nombre es Miguel Ángel Sánchez (@slaimer en Twitter).
Para los que no me conozcáis, soy programador PHP desde 2005, y soy miembro de PHPValencia desde 2013,
bueno, en realidad empecé siendo miembro de SymfonyVLC, antes de juntarnos todos los de Drupal y Symfony en PHPValencia.
Me gusta considerarme programador backend, el front no me va mucho, prefiero la parte back, y a ello me dedico actualmente en Wossom.
Wossom es una aventura que hemos comenzado unos compañeros y yo, somos una pequeña empresa de desarrollo a medida, trabajamos principalmente para startups, ayudándoles en el proceso de definición de producto e implementación del MVP.
Ayudamos también en la contratación de personal, formación y organización del equipo en las primeras fases.
...y hablando de contratación… estamos buscando gente, así que si estáis interesados en uniros a nosotros, podéis buscarme luego o enviar un email a mangel@wossom.com
Anteriormente he estado en otras startups, como Beroomers u Origo, y anteriormente he trabajado para empresas de proyectos.
Si algún día os aburrís, podéis echar un ojo a mi blog, donde hablo sobre buenas prácticas.
Ah! también participo en un podcast sobre literatura de ciencia ficción con unos colegas, aunque en realidad es una excusa para tomarnos unas cervezas ;)
Si os apetece podéis oirnos despotricar en iTunes y en Ivoox.
Si te suena mi cara quizá me hayas visto antes en otras charlas, como
Servicios web rest
o
Qué es OAuth y cómo se implementa
Controladores
Me imagino que si estás en esta charla es porque has trabajado alguna vez con controladores,
o con cualquier framework que simule una arquitectura MVC.
También puedo suponer que sabéis perfectamente qué es y cómo funciona el patrón MVC.
Y también puedo suponer, que como yo, y todo el mundo, has hecho controladores que preferirias que el mundo no viera.
Si os parece, vamos a entrar en materia dando un pequeño repaso al patrón MVC y su evolución a lo largo del tiempo.
Quedaos con esta frase, porque volveremos sobre ello
Dicho esto os lanzo una pregunta:
El modelo y la vista tienen interacción?
Levanten manos los que creen que si
Los que no
La respuesta es SÍ, el modelo actualiza la vista, pero si buscamos en internet el esquema del patrón...
La realidad es que, como habíamos visto antes, MVC no fue concebido como un patrón arquitectónico que gestione todo el flujo de una aplicación.
MVC está concebido como un patrón para gestionar individualmente los componentes de una aplicación: botones, menús… etc.
La intención es que cada elemento tuviese su propia la triada MVC, y que estos se comunicasen entre si mediante un sistema de mensajería tipo event-subscriber
¿Y cómo llegó este patrón entonces a ser el paradigma dominante en casi todas las aplicaciones?
¿Acaso no todos los frameworks que conocemos implementan MVC?
Lo cierto es que en una aplicación web, encaja bastante mal, OJO, una aplicación típica: monolítica, con renderizado desde servidor, etc, no una SPA o aplicaciones con base Javascript.
El modelo de app web consiste en peticiones que se ejecutan, se responden y mueren, no permanecen cargadas en memoria, simplemente ejecutan la petición y mueren.
No mantienen una interfaz viva, como una aplicación de escritorio que hasta que no sales de ella sigue cargada. Una aplicación web, no se comporta así.
Pero entonces llegó SUN Microsystems y diseño su patrón MODEL2 (en sustitución de MODEL1)...
¿Y qué decía MODEL2 que debían de hacer los controladores?
“Debidamente implementada, la arquitectura MODEL 2 resulta en una concentración de la lógica de negocio en el controlador, siendo las páginas JSP responsables solo de la vista.”
Por lo cual...
Esto es una generalización, obviamente no todos los proyectos son iguales, ni todos los programadores.
¿CÓMO SE OS QUEDA EL CUERPO?
Así me quedo yo, pero no es la única reacción que esto genera.
Y no solo esto, sino que cuando he trabajado en proyectos en que todos los controladores eran así, me he visto en situaciones como:
¿POR QUÉ ES ESTO TAN DAÑINO?
La presencia de método private o protected a veces indican que ahí probablemente haya lógica de dominio que no debería de estar.
Por otra parte, esa lógica corre el riesgo de estar replicada en otras partes, como por ejemplo un controlador del gestor de contenido, un comando de consola, un controlador de API...
Normalmente para testear un controlador tienes que utilizar las propias herramientas de testing de tu framework,
suelen ser clases complejas, que heredan de una clase base, que requieren muchos parámetros en el constructor….
Añádele que tienen lógica de dominio y la cosa se complica más
En muchas ocasiones, un mismo método tiene papeletas para estar en más de un controlador.
Dónde está el registro del usuario?
Controlador de Login?
Controlador de usuario?
…
Por todo esto, surge una alternativa:
Paul M. Jones es un experto en PHP reconocido internacionalmente.
Autor del framework Aura
Miembro votante de PHP-FIG
Autor principal de la recomendación PSR-4 y director de PSR-1 y PSR-2
Contribuidor fundador de Zend Framework
…
En realidad los cambios son más a nivel concepto
Al contrario que en MVC
Aquí cada clase se encarga de su parte, además está muy definida cada responsabilidad
...y bueno pues esto es ADR, espero que os haya parecido interesante, y que le déis una oportunidad y lo implementeis aunque sea en un pet-project vuestro.
GRACIAS