Architecture à n niveaux MVC Vs

142

Je me demandais quelle est exactement la différence entre MVC (qui est un modèle architectural) et une architecture à n niveaux pour une application. Je l'ai cherché mais je n'ai pas trouvé d'explication simple. Je suis peut-être un peu naïf sur les concepts MVC, donc si quelqu'un peut expliquer la différence, ce serait génial.

à votre santé

Arnkrishn
la source

Réponses:

94

L'architecture à N niveaux a généralement chaque couche séparée par le réseau. IE la couche de présentation se trouve sur certains serveurs Web, puis qui communique avec les serveurs d'applications principaux sur le réseau pour la logique métier, puis qui communique avec un serveur de base de données, à nouveau sur le réseau, et peut-être que le serveur d'applications appelle également certains services distants ( dire Authorize.net pour le traitement des paiements).

MVC est un modèle de conception de programmation dans lequel différentes parties de code sont responsables de la représentation du modèle, de la vue et du contrôleur dans certaines applications. Ces deux choses sont liées car, par exemple, la couche Model peut avoir une implémentation interne qui appelle une base de données pour stocker et récupérer des données. Le responsable du traitement peut résider sur le serveur Web et appeler à distance des serveurs d'applications pour récupérer des données. MVC résume les détails de la mise en œuvre de l'architecture d'une application.

N-tier se réfère simplement à la structure physique d'une implémentation. Ces deux éléments sont parfois confondus car une conception MVC est souvent implémentée à l'aide d'une architecture N-tier.

Zak
la source
56
N-tier est également un modèle de conception, vous n'avez pas besoin de 3 serveurs pour faire un système à 3 niveaux, en fait, il est possible de faire un système à n-tiers en utilisant un seul fichier, séparant chaque niveau par un concept conceptuel.
magallanes
6
Le niveau implique essentiellement qu'une communication interprocessus se produit généralement sur une liaison réseau. Je ne suis pas d'accord pour dire qu'un flux de conception de code en cours (et encore moins dans le même fichier) constitue une approche de conception à plusieurs niveaux. Bien sûr, c'est IMHO. «Serveur» implique que la machine peut exécuter plusieurs processus sur le même boîtier; et ils peuvent probablement encore parler sur le réseau "localhost".
Zak le
2
Tous les formats discutés sont des exemples de conceptions à 3 couches. Ne confondez pas la différence entre une couche et un niveau. Il est vrai que vous pouvez exécuter plus d'un niveau sur un mahcine physique (par exemple, vous divisez un gros serveur via des hyperviseurs), mais le point ici est que N-Tier est lié à un saut de réseau physique (par exemple TCP / IP). Localement, vous seriez plus efficace d'utiliser des canaux nommés, mais encore une fois, si vous exécutez sur le même système, vous êtes en concurrence pour la mémoire et la puissance de traitement. Tous ces éléments sont les raisons d'envisager d'isoler la présentation, la logique métier et l'accès aux données et la base de données sur différentes machines.
Zack Jannsen
1
Je recommanderais à quiconque lisant cette question de lire d'autres réponses, cette réponse est inexacte
keisar
@magallanes, Allez avec 'Zak', nous devons d'abord effacer la différence entre Tier et Layer Voici un très bon article de projet de code dans lequel il y a une explication claire
Irf
42

Si une conception à 3 niveaux était comme ceci:

Client <-> Middle <-> Data

le modèle MVC serait:

     Middle
     ^    |
     |    v
Client <- Data

Qui veut dire:

  • dans l'équivalent à 3 niveaux, la communication entre les couches est bidirectionnelle et passe toujours par le niveau intermédiaire
  • dans l'équivalent MVC, la communication est unidirectionnelle ; on pourrait dire que chaque "calque" est mis à jour par celui de gauche et, à son tour, met à jour celui de droite - où "gauche" et "droite" sont simplement illustratifs

Le client PS serait la vue et le milieu du contrôleur

néant
la source
13
dans MVC, le modèle peut-il interagir directement avec le client (vue) ??? Je ne pense pas!
palAlaa
6
@Alaa, je suis d'accord et c'est pourquoi je pense que cela fait référence au flux de données. Mise à jour: je viens de vérifier sur Wikipedia, et le modèle peut interagir avec la vue via des observateurs (pas directement).
annulé le
1
Dans MVC: l'architecture MVC est triangulaire: la vue envoie des mises à jour au contrôleur, le contrôleur met à jour le modèle et la vue est mise à jour directement à partir du modèle En trois niveaux: une architecture à trois niveaux est le niveau client ne communique jamais directement avec le niveau de données Dans un modèle à trois niveaux, toutes les communications doivent passer par le niveau intermédiaire
ketan italiya
1
Ici, si Middle est un contrôleur, la communication entre Middle, Client et Middle, les données sont bidirectionnelles et non unidirectionnelles comme décrit dans ans..Le contrôleur transmet les données au modèle et le modèle renvoie les données mises à jour au contrôleur qui les renvoie ensuite au navigateur après avoir traversé la vue.
Dragon
30

Voici ce que l' on dit de l' architecture n-tier

À première vue, les trois niveaux peuvent sembler similaires au concept MVC (Model View Controller); cependant, topologiquement, ils sont différents. Une règle fondamentale dans une architecture à trois niveaux est que le niveau client ne communique jamais directement avec le niveau de données; dans un modèle à trois niveaux, toutes les communications doivent passer par le niveau middleware. Conceptuellement, l'architecture à trois niveaux est linéaire. Cependant, l'architecture MVC est triangulaire: la vue envoie des mises à jour au contrôleur, le contrôleur met à jour le modèle et la vue est mise à jour directement à partir du modèle.

Xinus
la source
11
Cela semble bien, mais je ne pense pas que "la vue soit mise à jour directement à partir du modèle" soit une bonne idée. Cela n'a pas de sens d'utiliser le contrôleur pour les mises à jour et les insertions mais pas pour les sélections et les filtres, et je ne vois pas le point de séparation des préoccupations uniquement pour lier la vue au modèle de toute façon! Conclusion - MVC est une autre de ces obfuscations créées par .... ayez une supposition. Je ne me souviens pas que les trois niveaux aient jamais été limités à «l'architecture système» ou à la «conception d'applications». Le concept central est la séparation des préoccupations .
Sam
1
Cela dépendrait de ce que vous faites. Une application MVC pour une application iOS (qui ne permettrait probablement pas à la vue d'être mise à jour directement à partir du modèle) sera différente d'une application Web (ce qui pourrait). MVC est un paradigme, pas une manière absolue de faire les choses.
Dave Kanter
2
@Sam totalement d'accord. Trop de jargon pour un concept intuitif.
smwikipedia
1
sonne bien, ne fonctionne pas. Wikipédia n'est pas la source ultime de vérité
ACV
C'est la façon dont vous interprétez la vérité, et encore une fois, cela dépend de vos objectifs
Xinus
17

La seule similitude est que les deux modèles ont trois cases dans leurs diagrammes. Fondamentalement, ils sont complètement différents dans leurs utilisations. En fait, ce n'est généralement pas un choix entre le modèle à utiliser, mais les deux modèles peuvent être utilisés ensemble de manière inoffensive. Voici une bonne comparaison des deux: http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html

allthingscs
la source
3
Je pense que c'est de loin la meilleure réponse, d'autant plus que MVC est vraiment concentré sur l'interface utilisateur et qu'il peut s'agir de votre niveau d'interface utilisateur dans une conception à 3 niveaux. Le diagramme dans le lien le montre très bien.
Alex
5

Une règle fondamentale dans l'architecture à trois niveaux est que le niveau client ne communique jamais directement avec le niveau de données; dans un modèle à trois niveaux, toutes les communications doivent passer par le niveau middleware.

C'est une architecture de ligne. Cela répond à la question de savoir comment transmettre des informations entre un utilisateur et une base de données. Là où MVC est une architecture triangulaire: la vue envoie des mises à jour au contrôleur, le contrôleur met à jour le modèle et la vue est mise à jour directement à partir du modèle. Cela répond aux questions sur la façon dont une interface utilisateur gère les composants à l'écran.

pooja gupta
la source
5

@Cherry Middleware fonctionne plus comme un gestionnaire de requêtes ou un redirecteur dans MVC Pattern.

Je voudrais expliquer un peu MVC, selon moi, Model View Controller fonctionne comme ça.

  1. Le client lance la session en demandant n'importe quel service.
  2. Cette demande est reçue et traitée par le contrôleur (gestionnaire de demande, redirecteur, etc.)
  3. Le contrôleur traite une information de base sur la demande et la redirige vers le modèle concerné qui peut remplir la demande de données.
  4. Le modèle remplit la demande en fonction des paramètres passés par le contrôleur et renvoie les résultats au contrôleur. (Remarque: Ici, j'aime bien préciser que les données ne sont pas directement renvoyées au client dans la véritable architecture MVC, mais qu'elles se remplissent et sont renvoyées au contrôleur.)
  5. Contrôleur d'envoyer ces données à View (Client).
  6. Le client a devant lui le service demandé.

C'est tout à propos de MVC que je connais.

Aqeel Ahmad
la source
1
Je pense que, comme dit ci-dessus, MVC est triangulaire, donc la vue peut parfois parler directement au modèle et vice versa, comme expliqué dans ce document: msdn.microsoft.com/en-us/library/ms978748.aspx
ychaouche
5

Accordez-vous une pause. Et ne vous limitez pas à certains schémas lorsque vous résolvez des problèmes du monde réel. N'oubliez pas quelques principes généraux, dont l'un est la SÉPARATION DES PRÉOCCUPATIONS .

smwikipedia
la source
4

En plus d'être linéaire, une autre différence majeure qui n'a pas été suffisamment soulignée ici est que dans le modèle N-tiers, N n'est pas nécessairement 3-tiers! Il est le plus souvent implémenté en trois niveaux (présentation, application, données), la couche intermédiaire ayant deux sous-niveaux (logique métier et accès aux données). En outre, le modèle dans MVC peut contenir à la fois des données et une logique métier pour la manipulation de données, alors que ceux-ci se trouveraient dans des niveaux distincts dans n-tiers.

Alkema
la source
3

Une architecture N-Tier est mieux définie à l'aide d'un diagramme de déploiement.

Une architecture MVC est mieux définie à l'aide d'un diagramme de séquence.

Les 2 ne sont pas les mêmes et ne sont pas liés et vous pouvez combiner les deux architectures ensemble. De nombreuses entreprises ont pris les mesures nécessaires pour créer une architecture N Tier, non seulement pour le déploiement et l'évolutivité, mais également pour la réutilisation du code.

Par exemple, vos objets Entité commerciale peuvent devoir être utilisés par une application de bureau, un service Web exposé pour un client, une application Web ou une application mobile. Le simple fait d'utiliser une approche MVC ne vous aidera pas du tout à réutiliser quoi que ce soit.

Ed DeGagne
la source
Si mvc ne réutilise rien pour votre scénario donné, alors il y a des avantages de mvc par rapport à n tier arch.
Dragon
2

Conclusion: N-tier est une architecture, MVC un modèle de conception. Ce sont la même métaphore appliquée dans deux domaines différents.

ychaouche
la source
1

Jerry: Voici un exemple simple de la façon dont les deux sont liés:


Niveau 1 - Se compose de modèles qui communiquent avec le niveau 2 via une sorte de service réseau ou similaire, des contrôleurs pour gérer la validation des entrées, les calculs et autres éléments pertinents pour les vues. Et il contient les vues elles-mêmes, bien sûr - qui peuvent être l'interface graphique dans une application de bureau ou l'interface Web dans une application Web.


Niveau 2 - Contient une sorte de service ou une autre façon de recevoir des messages du niveau 1. Ne sait pas / ne devrait pas connaître le niveau 1, donc ne peut répondre qu'aux appels d'en haut - ne jamais demander les choses par lui-même. Contient également toute la logique métier.


Niveau 3 - Contient le modèle de domaine, la représentation objet de la base de données et toute la logique pour communiquer et mettre à jour les entrées de la base de données.

Arve Systad
la source
1

Dans un modèle à trois niveaux, toutes les communications doivent passer par le niveau intermédiaire. Conceptuellement, l'architecture à trois niveaux est linéaire. Cependant, l'architecture MVC [model-view-controller] est triangulaire: la vue envoie des mises à jour au contrôleur, le contrôleur met à jour le modèle et la vue est mise à jour directement à partir du modèle.

hassan ketabi
la source
En fait, ce n'est pas MVC, c'est MVVMC. Je vois que MVC ou MVVMC est juste une couche de présentation car je vois que le contrôleur n'est qu'un middleware entre les vues et BLL. C'est ainsi que je le maintiendrais afin de pouvoir utiliser BLL comme bibliothèque pour créer une interface utilisateur pour différentes plates-formes. C'est un peu aspx.cs avec le support asmx. J'ai parfois l'impression que MVC est une mauvaise façon d'organiser les fichiers dans un dossier de projet, c'est un peu difficile à comprendre car tous les contrôleurs seront à un niveau et les vues dans des sous-dossiers. Je peux également créer des sous-dossiers pour les contrôleurs mais son travail en double.
Nithin B le