Ist MVC ein Entwurfsmuster oder ein Architekturmuster?

109

Laut Sun und Msdn handelt es sich um ein Entwurfsmuster.

Laut Wikipedia handelt es sich um ein Architekturmuster

Im Vergleich zu Entwurfsmustern sind Architekturmuster größer. (Wikipedia - Architekturmuster )

Oder ist es ein Architekturmuster, das auch ein Designmuster hat?

Welches ist wahr ?

JCasso
quelle
1
Denn es muss eine wahre Antwort geben ...
Mike G
Laut Dave von Product Madness ist MVC ein Designmuster, ebenso wie RobotLegs. : P
andygoestohollywood

Antworten:

56

MVC ist eher ein Architekturmuster, jedoch nicht für die vollständige Anwendung. MVC bezieht sich hauptsächlich auf die Benutzeroberfläche / Interaktionsschicht einer Anwendung. Sie benötigen weiterhin eine Geschäftslogikschicht, möglicherweise eine Dienstschicht und eine Datenzugriffsschicht. Das heißt, wenn Sie sich für einen n-Tier-Ansatz interessieren.


quelle
16
Ja, ich würde sagen, MVC ist ein Architekturmuster für Ihre Präsentationsebene.
Murki
8
Ich bin nicht einverstanden mit "MVC bezieht sich hauptsächlich auf die Benutzeroberfläche / Interaktionsschicht einer Anwendung". Das "M" / Modell in MVC ist die Geschäftsschicht, die Sie wahrscheinlich in mehrere Ebenen aufteilen möchten.
Mewm
Ja, diese Antwort ist falsch. Bei MVC geht es absolut nicht um Benutzeroberfläche / Interaktion. Sie können mvc perfekt auf der Front-End-Seite und auf der Back-End-Seite haben. In der Anfangsansicht war oft nur ein HTML / Js oder ein .jsp oder ein .phtml und der Server definiert den Controller und das Modell. Beispiel JSP (Ansicht), JavaBeans (Modell), Servlet (Controller). Gleiches Konzept mit allen bekannten PHP-Frameworks (Symphonie, Zend, Kuchen usw.). Aber heutzutage sehen Frontend-Frameworks wie Back-End-Anwendungen aus, und moderne Javascript-Frameworks verwenden mvc (HTML Ihre Ansicht, steuern Sie Ihr Skript und modellieren Sie Ihre js-Objekte als Entität)
amdev
40

Warum muss einer von ihnen wahr sein?

Beides kann je nach Sichtweise zutreffen.

MVC kann ein Architekturmuster sein, wenn es die Grundlage der Anwendungsarchitektur bildet.

Es kann auch einfach als Entwurfsmuster angesehen werden, ein abstrakter Begriff, der auf jede Anwendung anwendbar ist.

Oded
quelle
27

Entwurfsmuster geben an, wie Code effektiv geschrieben werden kann (unter Berücksichtigung von Codemetriken ).

Einige Vorteile:

  1. Leicht zu warten
  2. Hohe Wiederverwendbarkeit
  3. Aufgrund von Abstraktionen lesbar

Architekturmuster zeigen , wie Ressourcen effektiv genutzt werden können.

  1. Parallele Aufgaben wie Programmierer und Grafikdesigner können parallel arbeiten.
  2. Zum Erstellen einer Software können mehrere Technologien verwendet werden.

In MVC a). Ansichten können mit Javascript-Vorlagen erstellt werden und auch HTML kann verwendet werden. B). Controller können als .NET Framework geschrieben werden und c). Modelle können in Java geschrieben werden - es kann ein Java-Dienst verwendet werden, der nur JSON-Daten zurückgibt.

Während des Entwurfsmusters kann kein Muster implementiert werden, in dem Code in mehreren Technologien wie der AdminUser-Klasse in Java, der Kundenklasse in C #, der Partners-Klasse in PHP und einem Factory-Muster in Ruby geschrieben werden kann :); hmmm..so einfach? :)

vrluckyin
quelle
6

Ich weiß, dass es vor einiger Zeit beantwortet wurde, aber noch hat niemand das Buch erwähnt, das MVC berühmt gemacht hat: Pattern-Oriented Software Architecture (POSA) von Buschmann et al., Das 1996 veröffentlicht wurde. Obwohl es nicht so häufig gelesen wird wie das Buch Design Patterns , von Gamma et al., ist POSA eines der grundlegenden Bücher, die von der Pattern-Community verwendet werden.

Oh, und POSA identifiziert MVC sehr deutlich als Architekturmuster. Meine Vermutung ist, dass MS und Sun nur schlampig sind und jedes Muster als "Designmuster" bezeichnen.

John
quelle
3

Ich denke beide sind wahr. Wenn Sie sich eine bestimmte Instanziierung von MVC in einem Framework wie Ruby on Rails ansehen, ist diese Instanziierung eher ein Entwurfsmuster. Wenn Sie MVC als allgemeines Konzept betrachten , handelt es sich eher um ein Architekturmuster.

Jim Ferrans
quelle
3

Die Entwurfsmuster innerhalb der MVC-Triade (Model / View / Controller) umfassen und sind möglicherweise nicht beschränkt auf:

  • Beobachter : Entkoppeln von Objekten, sodass Änderungen an einem (dem Modell) eine beliebige Anzahl anderer (die Ansichten) beeinflussen können, ohne dass das geänderte Objekt (das Modell) Details der anderen (der Ansichten) kennen muss.

  • Zusammengesetzt , mit dem wir ein Gruppenobjekt (eine zusammengesetzte Ansicht) genauso behandeln können wie eines seiner einzelnen Objekte (Ansichtskomponenten).

  • Strategie , bei der eine Ansicht eine Instanz einer Controller-Unterklasse verwendet, um eine bestimmte Antwortstrategie zu implementieren; Um eine andere Strategie zu implementieren, ersetzen Sie einfach die Instanz durch eine andere Art von Controller.

  • Factory-Methode , die die Standard-Controller-Klasse für eine Ansicht angibt.

  • Dekorateur , der einer Ansicht einen Bildlauf hinzufügt.


Referenz

  • Seiten 4 bis 6 (Abschnitt 1.2 Entwurfsmuster in Smalltalk MVC)
  • Seiten 293 bis 304 (Beobachterentwurfsmuster)
  • Seiten 163 bis 174 (zusammengesetztes Entwurfsmuster)
  • Seiten 315 bis 324 (Strategieentwurfsmuster)
  • Seiten 107 bis 116 (Entwurfsmuster der Factory-Methode)
  • Seiten 175 bis 185 (Dekorationsmuster)

Eric Gamma, Richard Helm, Ralph Johnson und John Vlissides. Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software . Addison-Wesley, Reading, MA, 1994.

George
quelle
1
Danke, alle anderen Antworten sind falsch. Es ist absolut nicht "abhängig von einem Standpunkt" und ein Dutzend oder Hunderte von Stimmen werden nichts falsch machen. MVC ist kein Entwurfsmuster selbst, sondern eine Möglichkeit, Ihren Code in drei Ebenen mithilfe des von Ihnen erwähnten einzelnen Entwurfsmusters zu architektieren. Alle Frameworks, die MVC hinter den Kulissen implementieren, verwenden das Konzept von Observable, Strategy und Composite Pattern. Der beste Weg, um MVC zu verstehen, besteht darin, eine eigene Implementierung zu erstellen. Anschließend werden Sie die dahinter stehenden Entwurfsmuster verstehen.
Amdev
2

MVC wurde in Software-Architekturbüchern immer als / in der Präsentationsschicht erwähnt und eingeführt.

Lesen Sie diese Bücher:

  1. Architektur von Microsoft.NET-Lösungen für Unternehmen (Microsoft Press)

  2. Professionelle ASP.NET-Entwurfsmuster (Wrox)

  3. Enterpise Solutions-Muster mit Microsoft.NET (Microsoft Press)

  4. Muster der Unternehmensanwendungsarchitektur (Addison Wesley)

  5. Ein praktischer Leitfaden zur Unternehmensarchitektur (Prentice Hall)

Saleh Rahimzadeh
quelle
6
warum 2 Antworten? Sie können diese Antwort als zusätzliche Anmerkung zu Ihrer ersten
hinzufügen
2

Wenn Sie zehn Softwarearchitekten in einen Raum stellen und sie das Model-View-Controller-Muster besprechen lassen, erhalten Sie zwölf verschiedene Meinungen. … Einige der Puristen da draußen werden unweigerlich Bedenken gegen das haben, was ich als „MVC“ bezeichne. Fühlen Sie sich frei, einen flammenden Kommentar im Message Board am Ende dieser Webseite zu hinterlassen. Ich werde gerne verschiedene Perspektiven auf die Bedeutung von MVC unterhalten, aber denke daran, dass es mir egal ist.

Josh Smith

Saleh Rahimzadeh
quelle
1

Und laut Martin Fowler handelt es sich um GUI-Architekturen: Martin Fowler-GUI-Architekturen

Dies hängt von der Größe der Anwendung ab, da es nur GUI-bezogene Klassen betrifft. In einer kleinen (meistens GUI) kann es als Architekturmuster betrachtet werden, während es in einer großen nur ein Entwurfsmuster ist, das Sie auf die GUI anwenden Code (könnte 10% des Apps-Codes sein).

Iker Jimenez
quelle