MVC gegen n-Tier-Architektur


142

Ich habe mich gefragt, was genau der Unterschied zwischen MVC (einem Architekturmuster) und einer n-Tier-Architektur für eine Anwendung ist. Ich habe danach gesucht, aber keine einfache Erklärung gefunden. Vielleicht bin ich ein bisschen naiv in Bezug auf MVC-Konzepte. Wenn also jemand den Unterschied erklären kann, wäre es großartig.

Prost

Antworten:


94

Bei der N-Tier-Architektur ist normalerweise jede Schicht durch das Netzwerk getrennt. IE, die Präsentationsschicht befindet sich auf einigen Webservern, die dann mit Backend-App-Servern über das Netzwerk für Geschäftslogik kommunizieren, dann mit einem Datenbankserver, erneut über das Netzwerk, und möglicherweise ruft der App-Server auch einige Remotedienste auf ( sagen Sie Authorize.net für die Zahlungsabwicklung).

MVC ist ein Programmierentwurfsmuster, bei dem verschiedene Teile des Codes für die Darstellung des Modells, der Ansicht und des Controllers in einer bestimmten Anwendung verantwortlich sind. Diese beiden Dinge hängen zusammen, weil beispielsweise die Modellschicht eine interne Implementierung haben kann, die eine Datenbank zum Speichern und Abrufen von Daten aufruft. Der Controller befindet sich möglicherweise auf dem Webserver und ruft App-Server remote auf, um Daten abzurufen. MVC abstrahiert die Details der Implementierung der Architektur einer App.

N-Tier bezieht sich nur auf die physische Struktur einer Implementierung. Diese beiden werden manchmal verwechselt, weil ein MVC-Entwurf häufig unter Verwendung einer N-Tier-Architektur implementiert wird.


56
N-Tier ist auch ein Entwurfsmuster. Sie benötigen keine 3 Server, um ein 3-Tier-System zu erstellen. Tatsächlich ist es möglich, ein N-Tier-System mit einer einzigen Datei zu erstellen, wobei jede Ebene durch ein konzeptionelles Konzept getrennt wird.
magallanes

6
Tier impliziert im Wesentlichen, dass eine Interprozesskommunikation normalerweise über eine Netzwerkverbindung stattfindet. Ich bin nicht der Meinung, dass ein In-Process-Code-Design-Flow (geschweige denn in derselben Datei) einen abgestuften Design-Ansatz darstellt. Das ist natürlich IMHO. "Server" bedeutet, dass der Computer mehrere Prozesse auf derselben Box ausführen kann. und sie können wahrscheinlich sogar noch im "localhost" -Netzwerk sprechen.
Zak

2
Alle besprochenen Formate sind Beispiele für 3-Schicht-Designs. Verwechseln Sie nicht den Unterschied zwischen einer Ebene und einer Ebene. Es ist wahr, dass Sie mehr als eine Schicht auf einem physischen Mahcine ausführen können (z. B. Sie teilen einen großen Server über Hypervisoren auf), aber der Punkt hier ist, dass N-Tier auf einen physischen Netzwerk-Hop (z. B. TCP / IP) verweist. Vor Ort wäre es effizienter, Named Pipes zu verwenden. Wenn Sie jedoch auf demselben System ausgeführt werden, konkurrieren Sie um Speicher und Rechenleistung. All dies sind die Gründe, die Präsentation, die Geschäftslogik und den Datenzugriff sowie die Datenbank auf verschiedenen Computern zu isolieren.
Zack Jannsen

1
Ich würde jedem empfehlen, der diese Frage liest, um andere Antworten zu lesen. Diese Antwort ist ungenau
keisar

@magallanes, gehen Sie mit 'Zak', zuerst müssen wir den Unterschied zwischen Tier und Layer klären. Hier ist ein sehr guter Codeprojekt-Artikel, in dem es eine klare Erklärung gibt
Irf

42

Wenn ein dreistufiges Design so wäre:

Client <-> Middle <-> Data

Das MVC-Muster wäre:

     Middle
     ^    |
     |    v
Client <- Data

Bedeutet, dass:

  • Im 3-Tier-Äquivalent ist die Kommunikation zwischen den Schichten bidirektional und verläuft immer über die mittlere Schicht
  • im MVC-Äquivalent ist die Kommunikation unidirektional ; das könnten wir sagen jede "Ebene" von der linken und wiederum von der rechten aktualisiert wird - wobei "links" und "rechts" nur zur Veranschaulichung dienen

PS- Client wäre die Ansicht und Mitte des Controllers


13
Kann das Modell in MVC direkt mit dem Client interagieren (Ansicht)? Das glaube ich nicht!
PalAlaa

6
@Alaa, ich stimme zu und deshalb denke ich, dass es sich um den Datenfluss handelt. Update: Ich habe gerade in Wikipedia eingecheckt und das Modell kann die Ansicht über Beobachter (nicht direkt) interagieren.
nichtig

1
In MVC: Die MVC-Architektur ist dreieckig: Die Ansicht sendet Aktualisierungen an den Controller, der Controller aktualisiert das Modell und die Ansicht wird direkt vom Modell aktualisiert. In drei Ebenen: Bei einer dreistufigen Architektur kommuniziert die Client-Ebene niemals direkt mit der Datenebene In einem dreistufigen Modell muss die gesamte Kommunikation über die mittlere Ebene erfolgen
ketan italiya

1
Wenn Middle ein Controller ist, ist die Kommunikation zwischen Middle, Client und Middle, bidirektional und nicht unidirektional, wie in ans beschrieben. Der Controller übergibt die Daten an das Modell und das Modell gibt die aktualisierten Daten an den Controller zurück, der sie dann an den Browser zurückgibt nach dem Durchgang durch die Ansicht.
Dragon

30

Dies ist, was über n-Tier-Architektur sagen

Auf den ersten Blick scheinen die drei Ebenen dem MVC-Konzept (Model View Controller) ähnlich zu sein. topologisch sind sie jedoch unterschiedlich. Eine grundlegende Regel in einer dreistufigen Architektur ist, dass die Client-Schicht niemals direkt mit der Datenschicht kommuniziert. In einem dreistufigen Modell muss die gesamte Kommunikation über die Middleware-Schicht erfolgen. Konzeptionell ist die dreistufige Architektur linear. Die MVC-Architektur ist jedoch dreieckig: Die Ansicht sendet Aktualisierungen an den Controller, der Controller aktualisiert das Modell und die Ansicht wird direkt vom Modell aktualisiert.


11
Hört sich gut an, aber ich glaube nicht, dass "Die Ansicht wird direkt vom Modell aktualisiert" eine gute Idee ist. Es ist nicht sinnvoll, den Controller für Aktualisierungen und Einfügungen zu verwenden, aber nicht für Auswahlen und Filter, und ich sehe keinen Punkt der Trennung von Bedenken, nur um die Ansicht ohnehin an das Modell zu binden! Schlussfolgerung - MVC ist eine weitere Verschleierung, die von ... erstellt wurde. Ich erinnere mich nicht, dass 3-Tier jemals auf "Systemarchitektur" oder "Anwendungsdesign" beschränkt war. Das zentrale Konzept ist die Trennung von Anliegen .
Sam

1
Es würde davon abhängen, was Sie tun. Eine MVC-App für eine iOS-Anwendung (bei der die Ansicht wahrscheinlich nicht direkt aus dem Modell aktualisiert werden kann) unterscheidet sich von einer Web-App (möglicherweise). MVC ist ein Paradigma, keine absolute Art, Dinge zu tun.
Dave Kanter

2
@ Sam stimme voll und ganz zu. Zu viel Jargon für ein intuitives Konzept.
Smwikipedia

1
klingt gut, funktioniert nicht. Wikipedia ist nicht die ultimative Quelle der Wahrheit
ACV

Es ist die Art, wie Sie die Wahrheit interpretieren, und wieder hängt es davon ab, was Ihre Ziele sind
Xinus

17

Die einzige Ähnlichkeit besteht darin, dass die beiden Muster drei Kästchen in ihren Diagrammen haben. Grundsätzlich unterscheiden sie sich in ihrer Verwendung völlig. Tatsächlich ist es normalerweise keine Wahl, welches Muster verwendet werden soll, aber beide Muster können harmonisch zusammen verwendet werden. Hier ist ein guter Vergleich der beiden: http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html


3
Ich denke, dies ist bei weitem die beste Antwort, zumal MVC sich wirklich auf die Benutzeroberfläche konzentriert und es Ihre Benutzeroberflächenebene in einem dreistufigen Design sein kann. Das Diagramm im Link zeigt dies sehr gut.
Alex

5

Eine grundlegende Regel in der dreistufigen Architektur ist, dass die Client-Schicht niemals direkt mit der Datenschicht kommuniziert. In einem dreistufigen Modell muss die gesamte Kommunikation über die Middleware-Schicht erfolgen.

Es ist Liner-Architektur. Dies befasst sich mit der Frage, wie Informationen zwischen einem Benutzer und einer Datenbank übertragen werden. Wenn MVC eine dreieckige Architektur ist: Die Ansicht sendet Aktualisierungen an den Controller, der Controller aktualisiert das Modell und die Ansicht wird direkt vom Modell aktualisiert. Hier werden Fragen behandelt, wie eine Benutzeroberfläche die Komponenten auf dem Bildschirm verwaltet.


5

@Cherry Middleware funktioniert eher wie ein Anforderungshandler oder Redirector in MVC Pattern.

Ich möchte etwas über MVC erklären. Meiner Meinung nach funktioniert Model View Controller so.

  1. Der Client initiiert die Sitzung, indem er einen Dienst anfordert.
  2. Diese Anfrage wird vom Controller empfangen und bearbeitet (Request Handler, Redirector usw.)
  3. Der Controller verarbeitet eine grundlegende Information über die Anforderung und leitet sie an das entsprechende Modell weiter, das die Datenanforderung ausfüllen kann.
  4. Das Modell füllt die Anforderung gemäß den vom Controller übergebenen Parametern aus und sendet die Ergebnisse an den Controller zurück. (Hinweis: Hier möchte ich klarstellen, dass Daten in einer echten MVC-Architektur nicht direkt an den Client zurückgegeben werden, sondern sich füllen und an den Controller zurückgegeben werden.)
  5. Controller als diese Daten an View (Client) senden.
  6. Der Kunde hat den gewünschten Service vor sich.

Das ist alles über MVC, das ich kenne.


1
Ich denke, dass MVC, wie oben erwähnt, dreieckig ist, sodass die Ansicht manchmal direkt mit dem Modell kommunizieren
ychaouche

5

Gönnen Sie sich eine Pause. Und beschränken Sie sich bei der Lösung realer Probleme nicht auf bestimmte Muster. Denken Sie nur an einige allgemeine Prinzipien, von denen eines die Trennung von Bedenken ist .


4

Ein weiterer wichtiger Unterschied, der hier nicht genug betont wurde, ist, dass N im N-Tier-Modell nicht unbedingt 3-Stufen ist! Es wird am häufigsten als drei Ebenen (Präsentation, App, Daten) implementiert, wobei die mittlere Ebene zwei Unterebenen (Geschäftslogik und Datenzugriff) aufweist. Außerdem kann das Modell in MVC sowohl Daten als auch Geschäftslogik für die Datenmanipulation enthalten, während diese in n-Ebenen in separaten Ebenen vorliegen würden.


3

Eine N-Tier-Architektur lässt sich am besten anhand eines Bereitstellungsdiagramms definieren.

Eine MVC-Architektur lässt sich am besten anhand eines Sequenzdiagramms definieren.

Die 2 sind nicht gleich und nicht verwandt, und Sie können die beiden Architekturen miteinander kombinieren. Viele Unternehmen haben die Schritte unternommen, um eine N-Tier-Architektur zu erstellen, die nicht nur die Bereitstellung und Skalierbarkeit, sondern auch die Wiederverwendung von Code ermöglicht.

Beispielsweise müssen Ihre Business Entity-Objekte möglicherweise von einer Desktop-App, einem für einen Client bereitgestellten Webdienst, einer Web-App oder einer mobilen App verwendet werden. Die einfache Verwendung eines MVC-Ansatzes hilft Ihnen nicht, irgendetwas wiederzuverwenden.


Wenn mvc für Ihr bestimmtes Szenario nichts wiederverwendet, bietet mvc im Vergleich zu n tier arch Vorteile.
Dragon

2

Fazit: N-Tier ist eine Architektur, MVC ein Entwurfsmuster. Sie sind dieselbe Metapher, die in zwei verschiedenen Bereichen angewendet wird.


1

Jerry: Hier ist ein einfaches Beispiel dafür, wie die beiden zusammenhängen:


Tier 1 - Besteht aus Modellen, die über einen Netzwerkdienst oder ähnliche Controller mit Tier 2 kommunizieren, um die Eingabevalidierung, Berechnungen und andere für die Ansichten relevante Dinge zu erledigen. Und es enthält natürlich die Ansichten selbst - das kann die GUI in einer Desktop-App oder die Weboberfläche in einer Web-App sein.


Tier 2 - Enthält eine Art Dienst oder eine andere Möglichkeit, Nachrichten von Tier 1 zu empfangen. Weiß / weiß nichts über Tier 1, kann also nur auf Anrufe von oben antworten - fragen Sie niemals selbst nach Dingen. Enthält auch alle Geschäftslogik.


Tier 3 - Enthält das Domänenmodell, die Objektdarstellung der Datenbank und die gesamte Logik zur Kommunikation und Aktualisierung von Datenbankeinträgen.


1

In einem dreistufigen Modell muss die gesamte Kommunikation über die mittlere Ebene erfolgen. Konzeptionell ist die dreistufige Architektur linear. Die MVC-Architektur [model-view-controller] ist jedoch dreieckig: Die Ansicht sendet Aktualisierungen an die Steuerung, die Steuerung aktualisiert das Modell und die Ansicht wird direkt vom Modell aktualisiert.


Eigentlich ist es nicht MVC, es ist MVVMC. Ich sehe, dass MVC oder MVVMC nur eine Präsentationsschicht ist, weil ich sehe, dass der Controller nur eine Middleware zwischen Ansichten und BLL ist. So würde ich es pflegen, damit ich BLL als Bibliothek verwenden kann, um eine Benutzeroberfläche für verschiedene Plattformen zu erstellen. Es ist eine Art aspx.cs mit asmx-Unterstützung. Ich bin manchmal der Meinung, dass MVC eine schlechte Methode zum Organisieren der Dateien in einem Projektordner ist. Es ist etwas schwer zu verstehen, da sich alle Controller auf einer Ebene befinden und Ansichten in Unterordnern anzeigen. Ich kann auch Unterordner für Controller erstellen, aber es funktioniert doppelt.
Nithin B
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.