web-dev-qa-db-fra.com

MVC est-il un modèle de conception ou un modèle architectural?

Selon Sun et Msdn c'est un modèle de conception.

D'après Wikipedia c'est un motif architectural

Par rapport aux modèles de conception, les modèles architecturaux ont une échelle plus grande. (Wikipedia - motif architectural )

Ou est-ce un motif architectural qui a aussi un motif de conception?

Lequel est vrai?

101
JCasso

MVC est davantage un motif architectural, mais pas pour une application complète. MVC concerne principalement la couche d'interface utilisateur/interaction d'une application. Vous aurez toujours besoin d'une couche de logique métier, peut-être d'une couche de service et d'une couche d'accès aux données. C'est-à-dire, si vous êtes dans l'approche n-tier.

51
user151323

Pourquoi l'un d'eux doit-il être vrai?

Les deux peuvent être vrais, selon le point de vue.

MVC peut être un motif architectural, s'il constitue la base de l'architecture de l'application.

Il peut également être considéré comme un simple motif, une notion abstraite applicable à toute application.

38
Oded

Design patterns explique comment écrire du code efficacement (en considérant métrique du code ).

Quelques avantages:

  1. Facilement maintenable
  2. Haute réutilisation
  3. Lisible à cause des abstractions

Schémas architecturaux dites comment utiliser les ressources efficacement.

  1. L'exécution de tâches parallèles comme les programmeurs et les graphistes peut travailler en parallèle.
  2. Plusieurs technologies peuvent être utilisées pour créer un logiciel.

Dans MVC, a). Les vues peuvent être créées à l'aide de modèles javascript. Vous pouvez également utiliser le langage HTML b). Les contrôleurs peuvent être écrits .NET Framework et c). Les modèles peuvent être écrits dans Java - un service Java peut être utilisé qui ne renvoie que des données json.

Dans le modèle de conception, un modèle ne peut pas être implémenté dans lequel du code peut être écrit dans plusieurs technologies, telles que la classe AdminUser en Java, la classe Client en C #, la classe Partenaires en Php et un modèle d'usine en Ruby :); hmmm..si facile? :)

26
vrluckyin

Je sais que la réponse a été donnée il y a un certain temps, mais personne n'a encore mentionné le livre qui a rendu MVC célèbre: L'architecture logicielle orientée vers le modèle (POSA), de Buschmann, et al publiée en 1996. Bien que moins lu que le livre Design Patterns par Gamma et al., POSA est l’un des ouvrages fondamentaux utilisés par la communauté des modèles.

Oh, et POSA identifie très clairement MVC en tant que modèle architectural. Mon impression est que MS et Sun ne font qu’être négligés et appellent chaque motif un "motif de conception".

6
John

Je pense que les deux sont vrais. Si vous regardez un instanciation particulier de MVC dans un cadre tel que Ruby sur Rails, cette instanciation est davantage un motif de conception. Si vous regardez MVC comme un concept général, c'est plus un motif architectural.

3
Jim Ferrans

Si vous placez dix architectes logiciels dans une pièce et que vous leur demandez de décrire le modèle Model-View-Controller, vous obtiendrez douze opinions différentes. … Certains des puristes auront inévitablement des scrupules avec ce que j'appelle "MVC". N'hésitez pas à laisser un commentaire enflammé sur le tableau d'affichage au bas de cette page Web. Je serai heureux d’entretenir différentes perspectives sur ce que signifie MVC, mais gardez à l’esprit que cela m’importe.

Josh Smith

2
Saleh Rahimzadeh

Les modèles de conception à l'intérieur du triade de classes Modèle/Vue/Contrôleur (MVC) comprennent, sans toutefois s'y limiter, les éléments suivants:

  • Observer, découplez les objets de sorte que les modifications apportées à l'un (le modèle) puissent affecter un nombre quelconque d'autres (les vues) sans exiger que l'objet modifié (le modèle) connaisse les détails des autres (les vues).

  • Composite, ce qui nous permet de traiter un objet de groupe (une vue composite) exactement comme nous traitons un de ses objets individuels (composants de vue).

  • Strategy, où une vue utilise une instance d'une sous-classe de contrôleur pour mettre en œuvre une stratégie de réponse particulière; pour mettre en œuvre une stratégie différente, remplacez simplement l'instance par un type de contrôleur différent.

  • Méthode d'usine, spécifiant la classe de contrôleur par défaut pour une vue.

  • Décorateur, ajout du défilement à une vue.


référence

  • Pages 4 à 6 (Section 1.2 Modèles de conception dans Smalltalk MVC)
  • Pages 293 à 304 (Modèle de conception Observer)
  • Pages 163 à 174 (Modèle de conception composite)
  • Pages 315 à 324 (modèle de conception de stratégie)
  • Pages 107 à 116 (modèle de conception de la méthode d'usine)
  • Pages 175 à 185 (modèle de conception de décorateur)

Eric Gamma, Richard Helm, Ralph Johnson et John Vlissides. Modèles de conception: Eléments d'un logiciel orienté objet réutilisable . Addison-Wesley, Reading, MA, 1994.

2
George

MVC a toujours mentionné et introduit comme couche de présentation dans les manuels d'architecture logicielle.

Lisez ces livres:

  1. Architecture des solutions Microsoft.NET pour l'entreprise (presse Microsoft)

  2. modèles de conception ASP.NET professionnels (Wrox)

  3. Enterpise Solutions Patterns utilisant Microsoft.NET (presse Microsoft)

  4. Patterns of Enterprise Application Architecture (Addison Wesley)

  5. Guide pratique de l'architecture d'entreprise (Prentice Hall)

2
Saleh Rahimzadeh

Et selon Martin Fowler, ce sont des architectures GUI: architectures Martin Fowler-GUI

Cela dépend de la taille de l'application, car il ne concerne que les classes liées à une interface graphique. Dans un petit modèle (principalement une interface graphique), il pourrait être considéré comme un motif architectural, alors que dans un très grand modèle, ce serait simplement un motif de conception que vous appliqueriez à l'interface graphique. code (pourrait être 10% du code des applications).

1
Iker Jimenez

MVC est un modèle d'architecture. Très clairement énoncé et montré à http://molecularsciences.org/zend/mvc_model_view_controller

0
Nazim