¿Es MVC un patrón de diseño o patrón arquitectónico?

109

Según Sun y Msdn , es un patrón de diseño.

Según Wikipedia es un patrón arquitectónico

En comparación con los patrones de diseño, los patrones arquitectónicos son de mayor escala. (Wikipedia - Patrón arquitectónico )

¿O es un patrón arquitectónico que también tiene un patrón de diseño?

Cual es verdadero ?

JCasso
fuente
1
Porque debe haber una respuesta verdadera ...
Mike G
Según Dave de Product Madness, MVC es un patrón de diseño, al igual que RobotLegs. : P
andygoestohollywood

Respuestas:

56

MVC es más un patrón arquitectónico, pero no para una aplicación completa. MVC se relaciona principalmente con la capa de interacción / interfaz de usuario de una aplicación. Todavía necesitará una capa de lógica empresarial, tal vez una capa de servicio y una capa de acceso a datos. Es decir, si te gusta el enfoque de n niveles.


fuente
16
Sí, diría que MVC es un patrón arquitectónico para su nivel de presentación.
murki
8
Estoy totalmente en desacuerdo con "MVC se relaciona principalmente con la interfaz de usuario / capa de interacción de una aplicación". El modelo "M" / en MVC es la capa empresarial, que probablemente desee dividir en varios niveles.
mewm
Sí, esta respuesta es incorrecta. MVC no se trata en absoluto de UI / Interacción. Puede tener perfectamente mvc en el lado frontal y en el lado posterior, al principio la vista solía ser solo un html / js o un .jsp o un .phtml y el servidor define el controlador y el modelo. Ejemplo JSP (vista), JavaBeans (modelo), Servlet (controlador). El mismo concepto con todo el famoso framework php (symphony, zend, cake, etc.). Pero los marcos frontend de hoy en día parecen una aplicación de back-end y los marcos javascript modernos usan mvc (html su vista, controle su script y
modele
40

¿Por qué uno de ellos tiene que ser cierto?

Ambos pueden ser ciertos, según el punto de vista.

MVC puede ser un patrón arquitectónico, si constituye la base de la arquitectura de la aplicación.

También puede verse simplemente como un patrón de diseño, una noción abstracta que es aplicable a cualquier aplicación.

Oded
fuente
27

Los patrones de diseño dicen cómo escribir código de manera efectiva (considerando las métricas de código ).

Algunos beneficios:

  1. Fácilmente Mantenible
  2. Alta reutilización
  3. Legible por abstracciones

Los patrones arquitectónicos dicen cómo utilizar los recursos de manera efectiva.

  1. La ejecución de tareas paralelas como programadores y diseñadores gráficos puede trabajar en paralelo.
  2. Se pueden utilizar múltiples tecnologías para construir un software.

En MVC, a). Las vistas se pueden crear usando plantillas javascript y también se puede usar html b). Los controladores se pueden escribir .NET framework yc). Los modelos se pueden escribir en Java; se puede usar un servicio de Java que devuelva solo datos json.

Mientras que en el patrón de diseño, no se puede implementar un patrón en el que el código se pueda escribir en múltiples tecnologías como la clase AdminUser en Java, la clase Cliente en C #, la clase Partners en Php y un patrón de fábrica en Ruby :); hmmm ... ¿tan fácil? :)

vrluckyin
fuente
6

Sé que ha sido respondida hace un tiempo, pero nadie ha mencionado aún el libro que hizo famoso a MVC: Arquitectura de software orientada a patrones (POSA), de Buschmann, et al publicado en 1996. Aunque no es tan leído como el libro de Patrones de diseño , por Gamma, et al, POSA es uno de los libros fundamentales utilizados por la comunidad de patrones.

Ah, y POSA identifica muy claramente MVC como un patrón arquitectónico. Mi corazonada es que MS y Sun están siendo descuidados y llaman a cada patrón un "patrón de diseño".

Juan
fuente
3

Creo que ambos son ciertos. Si está buscando una instanciación particular de MVC en un marco como Ruby on Rails, esa instanciación es más un patrón de diseño. Si mira MVC como un concepto general , es más un patrón arquitectónico.

Jim Ferrans
fuente
3

Los patrones de diseño dentro de la tríada de clases Modelo / Vista / Controlador (MVC) incluyen y pueden no estar limitados a:

  • Observador , desacoplando objetos para que los cambios en uno (el modelo) puedan afectar cualquier número de otros (las vistas) sin requerir que el objeto cambiado (el modelo) conozca los detalles de los demás (las vistas).

  • Compuesto , que nos permite tratar un objeto de grupo (una vista compuesta) como tratamos uno de sus objetos individuales (componentes de vista).

  • Estrategia , donde una vista usa una instancia de una subclase de Controlador para implementar una estrategia de respuesta particular; para implementar una estrategia diferente, simplemente reemplace la instancia con un tipo diferente de controlador.

  • Método de fábrica , especificando la clase de controlador predeterminada para una vista.

  • Decorador , agregando desplazamiento a una vista.


Referencia

  • Páginas 4 a 6 (Sección 1.2 Patrones de diseño en Smalltalk MVC)
  • Páginas 293 a 304 (patrón de diseño Observer)
  • Páginas 163 a 174 (patrón de diseño compuesto)
  • Páginas 315 a 324 (patrón de diseño de estrategia)
  • Páginas 107 a 116 (patrón de diseño del método de fábrica)
  • Páginas 175 a 185 (patrón de diseño del decorador)

Eric Gamma, Richard Helm, Ralph Johnson y John Vlissides. Patrones de diseño: elementos de software orientado a objetos reutilizable . Addison-Wesley, Reading, MA, 1994.

Jorge
fuente
1
Gracias, todas las demás respuestas son incorrectas. No es en absoluto "depender de un punto de vista" y tener docenas o cientos de votos no hará que algo malo sea cierto. MVC no es un patrón de diseño en sí mismo, es una forma de arquitectura de su código en 3 capas usando varios patrones de diseño que usted menciona. Todo el framework que implementa MVC detrás de escena utiliza el concepto de Observable, Strategy y composite pattern. La mejor manera de entender MVC es crear su propia implementación y luego comprenderá los patrones de diseño detrás.
amdev
2

MVC siempre se menciona e introduce como capa de presentación en los libros de arquitectura de software.

Lea estos libros:

  1. Diseño de soluciones Microsoft.NET para empresas (Microsoft press)

  2. Patrones de diseño ASP.NET profesionales (Wrox)

  3. Patrones de Enterpise Solutions utilizando Microsoft.NET (Microsoft press)

  4. Patrones de arquitectura de aplicaciones empresariales (Addison Wesley)

  5. Una guía práctica para la arquitectura empresarial (Prentice Hall)

Saleh Rahimzadeh
fuente
6
¿Por qué 2 respuestas? podría agregar esta respuesta como una nota adicional a la primera
frogatto
2

Si pones a diez arquitectos de software en una sala y les pides que discutan qué es el patrón Modelo-Vista-Controlador, terminarás con doce opiniones diferentes. … Algunos de los puristas por ahí inevitablemente tendrán reparos con lo que yo llamo “MVC”. Siéntase libre de dejar un comentario llamativo en el tablero de mensajes al final de esta página web. Con mucho gusto entretendré diferentes perspectivas sobre lo que significa MVC, pero tenga en cuenta que no me importa.

Josh Smith

Saleh Rahimzadeh
fuente
1

Y según Martin Fowler son arquitecturas GUI: arquitecturas Martin Fowler-GUI

Depende del tamaño de la aplicación, ya que solo afecta a las clases relacionadas con la GUI, en una pequeña (principalmente GUI) podría considerarse un patrón arquitectónico, mientras que en una enorme sería solo un patrón de diseño que se aplica a la GUI código (podría ser el 10% del código de la aplicación).

Iker Jiménez
fuente