34

Al pasar por la universidad y siguiendo el desarrollo de SO, he escuchado mucho sobre el patrón de diseño arquitectónico Model-View-Controller. Inadvertidamente utilicé el patrón MVC incluso antes de saber qué era, y todavía lo uso en mi trabajo diario. Por lo que he visto, es probablemente el patrón más popular que se usa hoy en día. De lo que no he escuchado mucho, son los patrones alternativos que puedes usar en lugar de MVC. ¿Qué opciones hay, y por qué razones decidirías usarlas a través de MVC? También me interesa conocer los tipos de sistemas para los que son típicos. Finalmente, ¿cuáles son los pros y contras que vienen con el uso de ellos?¿Qué alternativas hay para Model-View-Controller?

Respuesta

27
  1. pasiva Vista - http://martinfowler.com/eaaDev/PassiveScreen.html
  2. Supervisar Controller - http://martinfowler.com/eaaDev/SupervisingPresenter.html
  3. Modelo-Vista-Presentador - http://martinfowler.com/eaaDev/ModelViewPresenter.html

Mi favorito personal es el Ver pasiva. Más comprobables que otros que he visto, incluido MVC.

+1

También hay Model-View-ViewModel (-Controller), que está ganando popularidad en el espacio .NET. Usted crea un ViewModel (a menudo en el controlador) para pasar a la vista y reducir la dependencia de la vista en los detalles de implementación del modelo. Es mi favorito actual. –

+1

No es pasivo ¿Ver qué (casi) todos los frameworks web implementan? No puedo pensar en ningún marco fuera de mi cabeza que haya construido una encuesta AJAX para que el Modelo "notifique" la Vista. ¿Y cuál es la diferencia entre Passive View y 3 niveles? –

4

Ocasionalmente he visto MVC sin la C, donde la vista escucha los cambios en los datos del modelo y altera la representación en consecuencia, y donde los métodos en el modelo están vinculados a los manejadores de eventos para la vista.

Para proyectos donde la vista es por necesidad estrechamente unida con los datos (como cuando hay componentes visuales que se relacionan directamente con el modelo o atributos del modelo), esto puede ser útil, ya que corta el " hombre del medio ".

Creo que muchos argumentarían, sin embargo, que esto sigue siendo MVC, solo una versión hibridada, y que los enlaces establecidos entre la vista y el modelo son lógica del controlador.

4

Bueno, hay Model-View-Presenter, pero creo que encontrará que la "alternativa" más común a MVC es realmente la falta de separación adecuada. Como ejemplo extremo, considere las páginas ASP clásicas donde HTML, VBScript y SQL se encuentran uno al lado del otro en el mismo archivo. (Eso no es un golpe de ASP: encontrará muchos ejemplos en otros idiomas.)

4

Aunque las respuestas anteriores son bastante correctas, creo que es mucho más importante tener en cuenta que las palabras "patrón de diseño" están completamente desconocido para el 90% de todas las personas que crean software. Simplemente comienzan a escribir código.

El desafío no es seleccionar el mejor enfoque de diseño, es convencer a otros de que el diseño tiene valor.

1

En el marco Lift web que utilizamos un enfoque View First. Básicamente, una vista se compone de uno o más fragmentos (algo similar a los controladores) y los fragmentos se pueden anidar.Esto funciona muy bien con las capacidades de procesamiento XML integradas de HTML y Scala.

5

Algunos otros patrones arquitectónicos que incluyen MVC.

Sistemas acodadas

TCP/IP

Organización orientada a objetos

Modelo-Vista-Controlador, Presentación-abstracción de control, Modelo Vista Presentador y Vista de modelo ViewModel.

Ejemplos serían ASP.NET MVC, Ruby on Rails y muchos otros.

evento basado, invocación implícita

entorno de navegador (DOM)

Pipe y el filtro arquitectura

tuberías Unix

Repositorios

por tablas Intérpretes


También puede encontrar this paper por Garlan & Shaw en Arquitectura de Software una buena lectura.

Otro enlace digno de mención sería el artículo sobre patrones arquitectónicos en Wikipedia.

0

¿Qué pasa con el patrón Observer? Si no me equivoco, MVC se introdujo en Smalltalk y, posteriormente, varios patrones de publicación/suscripción han entrado en escena.

El patrón de observador (un subconjunto del patrón de publicación/suscripción) es un patrón de diseño de software en el que un objeto, llamado sujeto, mantiene una lista de sus dependientes, llamados observadores, y los notifica automáticamente sobre cualquier cambio de estado. generalmente llamando a uno de sus métodos. Se usa principalmente para implementar sistemas distribuidos de manejo de eventos.

Ej .: El botón Guardar se habilita en una edición, solo cuando hay datos para guardar. Otro ejemplo del patrón de observadores es la arquitectura Document View en MFC, donde en la vista se actualiza cuando cambia el documento.

+0

¡Díganos! ¿Cuáles son los beneficios de este patrón? –

Cuestiones relacionadas