web-dev-qa-db-fra.com

Quels sont les principaux avantages du modèle MVC par rapport au modèle 3 couches à l'ancienne

J'envisage d'utiliser un motif MVC dans mon nouveau projet et je peux clairement voir le principal avantage de pouvoir rapprocher la couche de données (le modèle) de la couche de présentation (la vue), ce qui permettra une légère augmentation. en vitesse d'application. Mais, mis à part les performances, le MVC présente-t-il d'autres avantages que le modèle de types en couches View-Logic-Data?

EDIT: Pour ceux que cela intéresse, je viens de télécharger un exemple de code PHP que j'ai créé pour tester l'utilisation de MVC. J'ai volontairement omis toutes les vérifications de sécurité pour rendre le code un peu plus facile à lire. S'il vous plaît, ne le critiquez pas trop, car je sais que cela pourrait être beaucoup plus raffiné et avancé, mais néanmoins - ça marche !!! Les questions et suggestions sont les bienvenues: voici le lien: http://www.sourcecodester.com/sites/default/files/download/techexpert/test_mvc.Zip

31
techexpert

La séparation des préoccupations citée comme un avantage de MVC constitue en réalité une avancée par rapport à un système à 3 couches/à 3 niveaux. Là aussi, la logique métier est indépendante et peut être utilisée à partir de différents niveaux de présentation.

Une différence principale est que dans MVC classique, le modèle peut avoir une référence vers la vue. Cela signifie que, lorsque les données sont mises à jour, le modèle peut les repousser éventuellement vers plusieurs vues. Le principal exemple est une application de bureau où les données sont visualisées de plusieurs manières. Cela peut être aussi simple qu'un tableau et un graphique. Un changement dans la table (qui est un changement dans une vue) est d’abord poussé via le contrôleur vers le modèle, qui le renvoie ensuite au graphique (l’autre vue). Le graphique se met alors à jour.

Depuis que le développement des postes de travail est en déclin, de nombreux programmeurs n’ont contacté MVC que dans certaines variantes Web, par exemple. via JSF en Java EE.

Dans ces cas, le modèle ne fait presque jamais référence à la vue. Cela est dû au fait que le Web est principalement basé sur une requête/réponse et qu'après qu'une requête ait été servie, le serveur ne peut pas envoyer d'informations supplémentaires. C'est à dire. une mise à jour transmise du modèle au client n'aurait aucun sens. Avec reverse ajax/comet, cela change, mais de nombreux frameworks MVC basés sur le Web ne l’utilisent toujours pas pleinement.

Ainsi, dans le cas du MVC basé sur le Web, le "triangle" typique entre M, V et C est moins présent et cette variante du MVC est en réalité plus proche d'un modèle à n niveaux que le "vrai" MVC.

Notez également que certains frameworks Web MVC ont une partie intermédiaire entre M, V et C appelée bean de support (Java/JSF) ou code behind (ASP.NET). Dans JSF, le contrôleur est fourni par la structure et la vue ne se lie souvent pas directement au modèle, mais utilise ce bean de support comme intermédiaire. Le bean de support est très fin et consiste simplement à pré-extraire les données du modèle dans un sens et à traduire les messages spécifiques au modèle (par exemple les exceptions) en messages spécifiques à la vue (par exemple un texte lisible par l'homme).

42
Arjan Tijms

À côté de 

  • réutilisation de code,
  • séparation des préoccupations, 
  • moins de couplage entre les couches,

déjà mentionné par @bakoyaro et @arjan

je pense que MVC est meilleur que 3 niveaux lorsqu'il est combiné avec le modèle "convention over configuration". (c'est-à-dire "Ruby on Rails" ou Microsofts "MVC for asp.net").

A mon avis, cette combinaison conduit à un meilleur et plus facile maintien du code.

En premier lieu, il est un peu plus difficile d’apprendre le framework mvc puisque vous devez apprendre les conventions (les contrôleurs vont dans le dossier des contrôleurs et doivent être nommés xxxxxcontroller)

Mais après avoir appris les conventions, il est plus facile de gérer votre propre code et celui de l'étranger. 

6
k3b

Oubliez l'augmentation de la vitesse d'application en passant à MVC. J'ai trouvé que le principal avantage était la facilité de réutilisation du code. Une fois que vous avez migré vers MVC, il n’ya plus de dépendance à la présentation de vos données ou au stockage des données réelles. 

Par exemple, vous pouvez écrire un jour un servlet qui a traité les pages .jsp en tant que couche de présentation et le lendemain, un service Web en tant que couche de présentation de votre modèle et de votre contrôleur existants. De la même manière, si vous voulez ou devez changer de SGBD. Comme l'accès au modèle est complètement séparé de tout le reste, il vous suffira de réécrire uniquement vos objets d'accès aux données pour renvoyer les données de manière à ce que votre contrôleur puisse les gérer.

En séparant les problèmes en 3 parties distinctes, vous facilitez également les tests unitaires. Votre couche de présentation peut être testée librement du modèle ou du contrôleur, et inversement. 

Sur une note de côté, j'ai souvent pensé que l'abréviation de MVC était inexacte. Chaque fois que je le vois, je le considère comme Affichage-> Contrôleur-> Modèle . La couche de présentation ne contiendra jamais de code DAO et le modèle ne contiendra jamais de logique de présentation. Le contrôleur est obligé de jouer le rôle d'intermédiaire.

2
bakoyaro

Là où 3-tier sépare la présentation de l'entreprise et l'accès aux données, MVC est un modèle de couche de présentation qui sépare encore Modèle (données) de la vue (écran) et du contrôleur (entrée).

Il n’ya pas de choix de MVC sur 3 niveaux/3 couches. Utilisez les deux.

0
SuperGirl