¿Cuál es la mejor alternativa al patrón de arquitectura del Controlador de vista de modelo (MVC)?

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:

  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.

En los últimos años, ha habido un par de nuevos diseños arquitectónicos MVVM y MVVC, siendo algunos de ellos. Son principalmente patrones de diseño frontend. Pero si desea fusionar backend y frontend, debe buscar en Node.JS.

Me gusta MVVM porque rara vez he tenido la conveniencia de un Modelo de vista y un Modelo de servidor alineados de tal manera que me consideren un verdadero MVC.

En MVVM, utiliza un modelo de vista especializado para sus requisitos de front-end, mientras mantiene un modelo que puede coincidir estrechamente con la capa de datos de su servidor.

En cuanto a la implementación de MVVM, Knockout.js es un gran marco MVVM. Algunas personas odian las partes vinculantes de la declaración html, pero también puede hacer esas asignaciones en Javascript.