Arquitectura MVC Vs n-tier

142

Me preguntaba cuál es exactamente la diferencia entre MVC (que es un patrón arquitectónico) y una arquitectura de n niveles para una aplicación. Lo busqué pero no pude encontrar una explicación simple. Puede ser que soy un poco ingenuo en los conceptos de MVC, por lo que si alguien puede explicar la diferencia, entonces sería genial.

salud

Arnkrishn
fuente

Respuestas:

94

La arquitectura de N niveles generalmente tiene cada capa separada por la red. Es decir, la capa de presentación está en algunos servidores web, luego eso habla con los servidores de aplicaciones de back-end a través de la red para la lógica empresarial, luego eso habla con un servidor de base de datos, nuevamente a través de la red, y tal vez el servidor de aplicaciones también llama a algunos servicios remotos ( diga Authorize.net para el procesamiento de pagos).

MVC es un patrón de diseño de programación en el que diferentes partes del código son responsables de representar el Modelo, la Vista y el controlador en alguna aplicación. Estas dos cosas están relacionadas porque, por ejemplo, la capa Modelo puede tener una implementación interna que llama a una base de datos para almacenar y recuperar datos. El controlador puede residir en el servidor web y llamar de forma remota a los servidores de aplicaciones para recuperar datos. MVC abstrae los detalles de cómo se implementa la arquitectura de una aplicación.

N-tier solo se refiere a la estructura física de una implementación. Estos dos a veces se confunden porque un diseño MVC a menudo se implementa utilizando una arquitectura de N niveles.

Zak
fuente
56
N-tier también es un patrón de diseño, no necesita 3 servidores para hacer un sistema de 3 niveles, de hecho, es posible hacer un sistema de n niveles usando un solo archivo, separando cada nivel por un concepto conceptual.
magallanes
66
El nivel básicamente implica que se está produciendo una comunicación entre procesos. Generalmente a través de un enlace de red. No estoy de acuerdo con que un flujo de diseño de código en proceso (y mucho menos en el mismo archivo) constituya un enfoque de diseño escalonado. Por supuesto que es en mi humilde opinión. "Servidor" implica que la máquina puede ejecutar varios procesos en la misma caja; y probablemente aún puedan hablar en la red "localhost".
Zak
2
Todos los formatos discutidos son ejemplos de diseños de 3 capas. No confunda la diferencia entre una capa y un nivel. Es cierto que puede ejecutar más de un nivel en una máquina física (por ejemplo, divide un gran servidor a través de hipervisores), pero el punto aquí es N-Tier alude a un salto de red física (por ejemplo, TCP / IP). A nivel local, sería más eficiente utilizar tuberías con nombre, pero de nuevo, si ejecuta el mismo sistema, está compitiendo por la memoria y la potencia de procesamiento. Todos estos son los motivos para considerar aislar la presentación, la lógica de negocios y el acceso a datos, y la base de datos en diferentes máquinas.
Zack Jannsen
1
Recomendaría a cualquiera que lea esta pregunta que lea otras respuestas, esta respuesta es inexacta
keisar
@magallanes, vaya con 'Zak', primero tenemos que aclarar la diferencia entre Tier y Layer Aquí hay un muy buen artículo de codeproject en el que hay una explicación clara
Irf
42

Si un diseño de 3 niveles fuera así:

Client <-> Middle <-> Data

el patrón MVC sería:

     Middle
     ^    |
     |    v
Client <- Data

Significa que:

  • en el equivalente de 3 niveles, la comunicación entre capas es bidireccional y siempre pasa por el nivel medio
  • en el equivalente MVC la comunicación es unidireccional ; podríamos decir que cada "capa" se actualiza por la de la izquierda y, a su vez, actualiza la de la derecha, donde "izquierda" y "derecha" son meramente ilustrativas

PS Client sería la vista y el medio del controlador

vacío
fuente
13
en MVC, ¿puede el modelo interactuar directamente con el cliente (ver)? Yo no lo creo!
palAlaa
66
@Alaa, estoy de acuerdo y por eso creo que se refiere al flujo de datos. Actualización: acabo de comprobar en Wikipedia, y el Modelo puede interactuar con la Vista a través de observadores (no directamente).
nulo
1
En MVC: la arquitectura MVC es triangular: la vista envía actualizaciones al controlador, el controlador actualiza el modelo y la vista se actualiza directamente desde el modelo En tres niveles: una arquitectura de tres niveles es el nivel del cliente que nunca se comunica directamente con el nivel de datos En un modelo de tres niveles, toda comunicación debe pasar por el nivel medio
ketan italiya
1
Aquí, si Middle es un controlador, entonces la comunicación entre Middle, Client y Middle, los datos son bidireccionales, no unidireccionales como se describe en ans..El controlador pasa los datos al modelo y el modelo devuelve los datos actualizados al controlador que luego los devuelve al navegador después de pasar por la vista.
Dragon
30

Esto es lo que dice sobre la arquitectura de n niveles

A primera vista, los tres niveles pueden parecer similares al concepto MVC (Model View Controller); sin embargo, topológicamente son diferentes. Una regla fundamental en una arquitectura de tres niveles es que el nivel del cliente nunca se comunica directamente con el nivel de datos; En un modelo de tres niveles, toda comunicación debe pasar por el nivel de middleware. Conceptualmente, la arquitectura de tres niveles es lineal. Sin embargo, la arquitectura MVC es triangular: la Vista envía actualizaciones al Controlador, el Controlador actualiza el Modelo y la Vista se actualiza directamente desde el Modelo.

Xinus
fuente
11
Suena bien, pero no creo que "la Vista se actualice directamente desde el Modelo" es una buena idea. ¡No tiene sentido usar el Controlador para actualizaciones e inserciones, pero no para selecciones y filtros, y no veo el punto de separación de las preocupaciones solo para vincular la vista al modelo de todos modos! Conclusión: MVC es otra de esas ofuscaciones creadas por ... adivinen. No recuerdo que los 3 niveles se hayan limitado a la "arquitectura del sistema" o al "diseño de la aplicación". El concepto central es la separación de las preocupaciones .
Sam
1
Dependerá de lo que estés haciendo. Una aplicación MVC para una aplicación iOS (que probablemente no permitiría que la vista se actualice directamente desde el Modelo) será diferente a una aplicación web (que podría). MVC es un paradigma, no una forma absoluta de hacer las cosas.
Dave Kanter
2
@Sam totalmente de acuerdo. Demasiada jerga para un concepto intuitivo.
smwikipedia
1
Suena bien, no funciona. Wikipedia no es la última fuente de verdad
ACV
Es la forma en que interpretas la verdad, y de nuevo depende de cuáles sean tus objetivos
Xinus
17

La única similitud es que los dos patrones tienen tres cuadros en sus diagramas. Fundamentalmente son completamente diferentes en sus usos. De hecho, no suele ser una elección entre qué patrón usar, pero ambos patrones se pueden usar juntos de forma dañina. Aquí hay una buena comparación de los dos: http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html

allthingscs
fuente
3
Creo que esta es, con mucho, la mejor respuesta, especialmente porque MVC está realmente enfocado en la interfaz de usuario, y puede ser su nivel de interfaz de usuario en un diseño de 3 niveles. El diagrama en el enlace lo demuestra muy bien.
Alex
5

Una regla fundamental en la arquitectura de tres niveles es que el nivel del cliente nunca se comunica directamente con el nivel de datos; En un modelo de tres niveles, toda comunicación debe pasar por el nivel de middleware.

Es la arquitectura de línea. Esto aborda la cuestión de cómo pasar información entre un usuario y una base de datos. Donde como MVC es una arquitectura triangular: la Vista envía actualizaciones al Controlador, el Controlador actualiza el Modelo y la Vista se actualiza directamente desde el Modelo. Esto aborda preguntas sobre cómo una interfaz de usuario administra los componentes en la pantalla.

Pooja Gupta
fuente
5

@Cherry Middle ware funciona más como un controlador de solicitudes o redirector en MVC Pattern.

Me gustaría explicar un poco sobre MVC, según mi opinión, el Controlador de vista de modelo funciona así.

  1. El cliente inicia la sesión solicitando cualquier servicio.
  2. Esta solicitud es recibida y manejada por el controlador (controlador de solicitud, redirector, etc.)
  3. El controlador procesa una información básica sobre la solicitud y la redirige al Modelo relevante que puede completar la solicitud de datos.
  4. El modelo completa la solicitud de acuerdo con los parámetros pasados ​​por el controlador y envía los resultados al controlador. (Nota: aquí me gusta aclarar que los datos no se devuelven directamente al cliente en la verdadera arquitectura MVC, sino que se llenan y se devuelven al controlador).
  5. Controlador que envía esos datos a Ver (Cliente).
  6. El cliente tiene el servicio solicitado en frente de él.

Eso es todo sobre MVC que sé.

Aqeel Ahmad
fuente
1
Creo que, como se dijo anteriormente, MVC es triangular, por lo que la Vista a veces puede hablar directamente con el Modelo y viceversa, como se explica en este documento: msdn.microsoft.com/en-us/library/ms978748.aspx
ychaouche
5

Date un descanso. Y no se limite a ciertos patrones al resolver problemas del mundo real. Solo recuerde algunos principios generales, uno de los cuales es SEPARACIÓN DE PREOCUPACIONES .

smwikipedia
fuente
4

Además de ser lineal, otra diferencia importante que no se enfatizó lo suficiente aquí es que en el modelo de N niveles, ¡N no es necesariamente de 3 niveles! Con mayor frecuencia se implementa como tres niveles (presentación, aplicación, datos) con la capa intermedia que tiene dos subniveles (lógica de negocios y acceso a datos). Además, el modelo en MVC puede contener datos y lógica de negocios para la manipulación de datos, mientras que estos estarían en niveles separados en n-tier.

Alkema
fuente
3

Una arquitectura de N niveles se define mejor usando un Diagrama de implementación.

Una arquitectura MVC se define mejor usando un diagrama de secuencia.

Los 2 no son iguales y no están relacionados, y puede combinar las dos arquitecturas juntas. Muchas empresas han dado los pasos para crear la arquitectura N Tier'd no solo para la implementación y la escalabilidad, sino también para la reutilización del código.

Por ejemplo, los objetos de su entidad comercial pueden necesitar ser consumidos por una aplicación de escritorio, un servicio web expuesto para un cliente, una aplicación web o una aplicación móvil. Simplemente usar un enfoque MVC no lo ayudará a reutilizar nada en absoluto.

Ed DeGagne
fuente
Si mvc no está reutilizando nada para su escenario dado, ¿hay algún beneficio de mvc en comparación con n tier arch.
Dragón
2

Conclusión: N-tier es una arquitectura, MVC un patrón de diseño. Son la misma metáfora aplicada en dos campos diferentes.

ychaouche
fuente
1

Jerry: Aquí hay un ejemplo simple de cómo se relacionan los dos:


Nivel 1 : consta de modelos que se comunican con el Nivel 2 a través de algún tipo de servicio de red o similar, controladores para manejar la validación de entrada, cálculos y otras cosas relevantes para las vistas. Y, por supuesto, contiene las vistas en sí, que pueden ser la GUI en una aplicación de escritorio o la interfaz web en una aplicación web.


Nivel 2 : contiene algún tipo de servicio u otra forma de recibir mensajes del Nivel 1. No sabe / no debe saber sobre el Nivel 1, por lo que solo puede responder a las llamadas desde arriba; nunca pregunte por sí mismo. También contiene toda la lógica de negocios.


Nivel 3 : contiene el modelo de dominio, la representación de objetos de la base de datos y toda la lógica para comunicar y actualizar las entradas de la base de datos.

Arve Systad
fuente
1

En un modelo de tres niveles, toda comunicación debe pasar por el nivel medio. Conceptualmente, la arquitectura de tres niveles es lineal. Sin embargo, la arquitectura MVC [model-view-controller] es triangular: la vista envía actualizaciones al controlador, el controlador actualiza el modelo y la vista se actualiza directamente desde el modelo.

Hassan Ketabi
fuente
En realidad no es MVC, es MVVMC. Veo que MVC o MVVMC es solo una capa de presentación porque veo que el controlador es solo un middleware entre vistas y BLL. Así es como lo mantendría para poder usar BLL como biblioteca para crear UI para diferentes plataformas. Es una especie de aspx.cs con soporte asmx. A veces siento que MVC es una mala forma de organizar los archivos en una carpeta de proyecto, es un poco difícil de entender porque todos los controladores estarán en un nivel y las vistas en subcarpetas. También puedo crear subcarpetas para controladores pero su trabajo duplicado.
Nithin B