147 votes

Architecture MVC Vs n-tier

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

salutations

105voto

Zak Points 10160

Dans une architecture N-tier, chaque couche est généralement séparée par le réseau. Par exemple, la couche de présentation se trouve sur des serveurs Web, qui communiquent avec des serveurs d'applications dorsaux via le réseau pour la logique commerciale, qui communiquent avec un serveur de base de données, toujours via le réseau, et peut-être que le serveur d'applications fait également appel à des services distants (par exemple Authorize.net pour le traitement des paiements).

MVC est un modèle de programmation dans lequel différentes parties du code sont responsables de la représentation du modèle, de la vue et du contrôleur dans une application. Ces deux éléments sont liés car, par exemple, la couche Modèle peut avoir une implémentation interne qui appelle une base de données pour stocker et récupérer des données. Le contrôleur peut résider sur le serveur web et appeler à distance des appservers pour récupérer des données. MVC fait abstraction des détails de la mise en œuvre de l'architecture d'une application.

N-tier fait simplement référence à la structure physique d'une implémentation. Ces deux notions sont parfois confondues car une conception MVC est souvent mise en œuvre à l'aide d'une architecture N-tier.

62 votes

N-tier est aussi 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-tier en utilisant un seul fichier, en séparant chaque niveau par un concept.

7 votes

Tier implique essentiellement qu'une communication interprocessus se produit généralement à travers un lien réseau. Je ne suis pas d'accord avec le fait qu'un flux de conception de code dans le processus (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 la même boîte ; et ils peuvent probablement même encore parler sur le réseau "localhost".

2 votes

Tous les formats abordés sont des exemples de conceptions à trois niveaux. 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 une mahcine physique (par exemple, vous divisez un gros serveur via des hyperviseurs), mais le point ici est que N-Tier fait référence à un saut de réseau physique (par exemple, TCP/IP). Localement, il serait plus efficace d'utiliser des tubes nommés, mais là encore, si vous travaillez sur le même système, vous êtes en concurrence pour la mémoire et la puissance de traitement. Ce sont toutes les raisons pour lesquelles il faut envisager d'isoler la présentation, la logique d'entreprise et l'accès aux données, ainsi que la base de données sur des machines différentes.

46voto

void Points 509

Si un design à 3 niveaux était comme ça :

Client <-> Middle <-> Data

la patte MVC serait :

     Middle
     ^    |
     |    v
Client <- Data

Ce qui veut dire que :

  • dans l'équivalent à 3 niveaux, la communication entre les couches est bidirectionnel et passe toujours par l'échelon intermédiaire
  • dans l'équivalent MVC, la communication se fait dans unidirectionnel ; on pourrait dire que Chaque "couche" est mise à jour par celle de gauche et, à son tour, met à jour celle de droite. -où "gauche" et "droite" ne sont que des exemples.

P.S. Client serait le Voir et Moyen le site Contrôleur

15 votes

Dans MVC le modèle peut interagir directement avec le client (vue) ? ?? Je ne le pense pas !

6 votes

@Alaa, je suis d'accord et c'est pourquoi je pensez à il s'agit du flux de données. Mise à jour : je viens de vérifier sur Wikipedia, et le modèle peut interagir avec la vue par le biais d'observateurs (pas directement).

1 votes

En 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 Tiers : Dans une architecture à trois niveaux, le niveau client ne communique jamais directement avec le niveau données Dans un modèle à trois niveaux, toutes les communications doivent passer par le niveau intermédiaire.

33voto

Xinus Points 7693

C'est ce que dire à propos de architecture n-tiers

A première vue, les trois niveaux peuvent similaires au concept MVC (Model View contrôleur) ; cependant topologiquement, ils sont différents. A règle fondamentale dans une architecture est que le niveau client ne communique jamais ne communique jamais directement avec le niveau données ; dans un modèle à trois niveaux, toute communication doit passer par le niveau intergiciel. Conceptuellement, l'architecture architecture à trois niveaux est linéaire. Cependant, l'architecture MVC est triangulaire : la vue envoie des mises à jour au le contrôleur, le contrôleur met à jour le Modèle, et la Vue est mise à jour directement depuis le modèle.

11 votes

C'est une bonne idée, 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 l'intérêt de la 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 .... pour avoir une idée. Je ne me souviens pas que le 3-tier ait jamais été limité à "l'architecture du système" ou à "la conception de l'application". Le concept central est séparation des préoccupations .

1 votes

Cela dépend de ce que vous faites. Une application MVC pour une application iOS (qui ne permettrait probablement pas la mise à jour de la vue directement à partir du modèle) sera différente d'une application Web (qui le pourrait). MVC est un paradigme, pas une façon absolue de faire les choses.

3 votes

@Sam totalement d'accord. Trop de jargon pour un concept intuitif.

29voto

CharithJ Points 15364

N-Tier

Un système à trois niveaux est réellement constitué de couches (pensez aux couches d'un gâteau). La couche d'interface utilisateur a accès à la couche de logique d'entreprise, et la couche d'entreprise a accès à la couche de données. Mais la couche d'interface utilisateur ne peut pas accéder directement à la couche de données. Pour que la couche interface utilisateur puisse accéder aux données, elle doit passer par la couche logique métier via une sorte d'interface. Si cela peut vous aider, vous pouvez considérer chaque couche comme un grand composant faiblement couplé avec des règles de conception strictes pour l'accès entre les couches.

enter image description here

MVC (Model View Controller)

En revanche, le modèle MVC ne conserve évidemment pas un système en couches. Le contrôleur accède au modèle (un référentiel de données d'exécution) et à la vue. La vue accède ensuite au modèle. Comment cela fonctionne-t-il exactement ? Le contrôleur est finalement le point de décision logique. Quelle sorte de logique ? En général, le contrôleur récupère, construit ou modifie un modèle en fonction d'une action déclenchée. Le contrôleur décide ensuite quelle vue est appropriée via une logique interne. A ce moment-là, le contrôleur va pousser le modèle vers la vue.

enter image description here

Referene.

19voto

allthingscs Points 137

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, il ne s'agit généralement pas de choisir le motif à utiliser, mais les deux motifs peuvent être utilisés ensemble de manière harmonieuse. Voici une bonne comparaison des deux : http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html

3 votes

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X