Creo que este es el mejor: bohdan-vorona / Design-Patterns-in-PHP-Keith-Casey
Respondedor de dominio de acción (o simplemente ADR)
El patrón dominante que describe las interacciones web es Model-View-Controller . ¿Es Action-Domain-Responder realmente solo Model-View-Controller en arrastre? Podemos ver que los términos ADR se correlacionan muy bien con los términos MVC:
- En los sitios web, ¿cómo hace que se desplace suavemente a un elemento?
- ¿Diferencia entre la validación del lado del cliente y la validación del lado del servidor?
- ¿Es una buena idea construir un motor de raspado web utilizando solo Node.JS y una cola de trabajos respaldada con Redis?
- ¿Qué lenguaje de programación y base de datos del lado del servidor recomendaría para una startup tecnológica de mercado bidireccional?
- ¿Qué parte de una pila de tecnología es la más difícil de cambiar, similar a lo que le sucedió a Facebook en PHP?
Modelo Vista de dominio Respondedor Controlador Acción
Los dos parecen muy similares. ¿En qué se diferencian?
En general, podemos ver de Fowler en su ensayo de GUI Architectures que “no hay una sola vista y controlador, tienes un par de vista-controlador para cada elemento de la pantalla, cada uno de los controles y la pantalla como un todo”. Este es el elemento principal de la difusión semántica cuando se aplica MVC a aplicaciones web.
Aquí hay algunas comparaciones más de los elementos individuales en MVC vs ADR.
Modelo vs Dominio
No puedo pensar en diferencias significativas aquí, aparte de que el Respondedor no interactúa con el Dominio de manera significativa. El Respondedor puede usar objetos de Dominio como entidades y colecciones, pero solo con fines de presentación; no modifica el dominio ni envía información al dominio como se describe en MVC.
Controlador vs Acción
De uso común, la mayoría de las clases de Controladores en una arquitectura MVC contienen varios métodos correspondientes a diferentes acciones. Debido a que estos métodos de acción diferentes residen en el mismo Controlador , el Controlador termina necesitando una lógica de envoltura adicional para tratar cada método correctamente, como los ganchos previos y posteriores a la acción. Una excepción notable aquí es en micro-frameworks, donde cada controlador es un cierre individual o un objeto invocable, que se asigna más estrechamente a una sola acción (cf.Slim).
En una arquitectura ADR, una sola Acción es el propósito principal de una clase o cierre. Cada acción estaría representada por una clase individual o cierre.
La acción interactúa con el dominio de la misma manera que un controlador interactúa con un modelo , pero no interactúa con un sistema de vista o plantilla. Establece datos sobre el Respondedor y le entrega el control.
Ver vs Respondedor
En una arquitectura MVC, un método de controlador generalmente generará contenido corporal a través de una vista (por ejemplo, una vista de plantilla o una vista de dos pasos ). El controlador luego inyecta el contenido corporal generado en la respuesta. El método de acción Controlador manipulará la respuesta directamente para establecer los encabezados necesarios.
Algunos métodos de acción del controlador pueden presentar tipos de contenido alternativos para los mismos datos de dominio. Debido a que estas alternativas pueden no ser consistentes en todos los métodos diferentes, esto lleva a que la lógica de presentación sea algo diferente en cada método, cada uno con sus propias condiciones previas.
En una arquitectura ADR, cada Acción tiene un Respondedor correspondiente. Cuando la Acción se realiza con el Dominio , entrega todos los datos de Dominio necesarios al Respondedor y luego lo entrega completamente al Respondedor . El Respondedor está completamente a cargo de configurar los encabezados, elegir los tipos de contenido, las plantillas de representación, etc.
Tenga en cuenta que un Respondedor puede incorporar una Vista de plantilla , Vista de dos pasos , Vista de transformación o cualquier otro tipo de sistema de Vista . Tenga en cuenta también que un Respondedor genérico puede ser utilizado por más de una Acción . El punto es que la Acción deja todo el trabajo de encabezado y contenido al Respondedor , no que debe haber un Respondedor diferente para cada Vista diferente.