# Unterschied MVC - 3tier-Architektur



## Guest (7. Jul 2008)

Hallo!

Ich arbeite mich grad in JSF ein und hab mal ne logische Frage.
Ich hab das mal ins allgemeine Forum gepostet, weil es nicht unbedingt um JSF es, sondern dadurch die Frage nur entstand.

JSF baut ja auf dem *MVC-Modell *auf, d.h. für mich:

View:  
JSP-Seiten mit JSF-Tags
                    stellt Daten aus dem Modell dar
                    leitet Nutzeraktionen (Klick auf Button etc.) an den Controller weiter

Model:  
Bean, die beispielsweise auf Datenbank mit Datensätzen drin zugreift
                    behält Daten für View bereit
                    kennt weder Controller noch View

Controller:   
Faces Servlet
                    beinhaltet die Intelligenz der Anwendung -> Ablaufsteuerung
                    wertet entgegengenommene Nutzeraktionen aus, leitet sie an Bean / View weiter
                    Controller registriert sich bei der View -> View kennt Controller

Hab ich das so erstmal richtig?

So jetzt stellt sich mir die Frage, wo so richtig der Unterschied zur *3tier-Architektur * ist. Die wenigen englischen Quellen verwirren mich irgendwie nur noch mehr.
Bisher hab ich nur verstanden, dass es die Präsentations-, Logik-, und Datenhaltungsschicht gibt und das für mich quasi identisch zu MVC klingt.

Präsentationsschicht:
                    Darstellung Daten
                    Zugriff z.B. über HTTP auf Logikschicht
                    zuständig für Verarbeiten Nutzeraktionen

Datenhaltungsschicht:
                    z.B. relationale Datenbank mit Datensätzen

Logikschicht:
                    Datenverarbeitung -> Anwendungslogik
                    beinhaltet Verarbeitungsmechanismen
                    Zugriff auf Datenhaltungsschicht z.B. über JDBC

Der einzige Unterschied, der sich mir ergibt, ist, dass bei MVC das Model für die Datenhaltung und Verarbeitung notwendig ist, es nicht unbedingt eine Datenbank geben muss und der Controller quasi nur zwischen allen vermittelt, weiterleitet und sonst nix macht.

Bei der 3tier-Architektur ist die Datenhaltungsschicht die Datenbank selbst und die Logikschicht ne Mischung aus Controller und Model.

Bitte helft mir


----------



## SlaterB (7. Jul 2008)

ich sehe MVC in diesem Vergleich nur als eine Möglichkeit zum Aufbau der Präsentationsschicht,

die DB- und Logik-Schicht haben damit gar nix zu tun, funktionieren völlig gleich bei HTML- + Swing-Frontend

teilweise kann man MVC auch innerhalb der anderen Schichten finden,
die Trennen von Daten + kontrollierenden Logik-Klassen z.B. sowieso praktisch überall,

View braucht man dagegen nicht so häufig, weswegen ich zumindest sowas nur mit einem Frontend verbinde


----------



## byte (7. Jul 2008)

Anonymous hat gesagt.:
			
		

> So jetzt stellt sich mir die Frage, wo so richtig der Unterschied zur *3tier-Architektur * ist. Die wenigen englischen Quellen verwirren mich irgendwie nur noch mehr.
> Bisher hab ich nur verstanden, dass es die Präsentations-, Logik-, und Datenhaltungsschicht gibt und das für mich quasi identisch zu MVC klingt.


Du musst unterscheiden zw. logischen- und physikalischen Schichten. Unter 3-Schicht-Architektur versteht man i.A. drei physikalische Schichten (Client - Server - Datenbank). MVC ist ein Konzept, dass (den Client-Code) quasi in drei logische Schichten einteilt.
Grundsätzlich sind nur physikalische Schichten erwähnenswert, denn logisch kann man den Code in nahezu beliebig viele Schichten einteilen. Ob das sinnvoll ist, sei mal dahingestellt.


----------



## SlaterB (7. Jul 2008)

die beschriebene 3-Schichten-Software-Architektur macht auf jeden Fall Sinn und ist bekannt, 
egal wie man sie nennen oder nicht nennen mag,

aber sie steht zu MVC nicht in Konkurrenz, sondern beschreibt eine Art Kapseltung, ein Schichten-Modell relativ unabhängiger Ebenen,
während MVC eher ein Dreieck ineinandergreifender Komponenten einer gemeinsamen Schicht ist

edit: natürlich hat man auch beim MVC deutliche Trennungen, aber ebenso Abhängigkeiten, 
ein Controller FacesServlet kann nur mit JSP & Co zusammenarbeiten, weniger mit JTable 

der Logik-Schickt aus dem anderen Konzept ist es dagegen ganz egal, ob weiter oben HTML oder Swing oder sonstwer anfragt


----------



## maki (7. Jul 2008)

> Du musst unterscheiden zw. logischen- und physikalischen Schichten. Unter 3-Schicht-Architektur versteht man i.A. drei physikalische Schichten (Client - Server - Datenbank). MVC ist ein Konzept, dass (den Client-Code) quasi in drei logische Schichten einteilt.
> Grundsätzlich sind nur physikalische Schichten erwähnenswert, denn logisch kann man den Code in nahezu beliebig viele Schichten einteilen. Ob das sinnvoll ist, sei mal dahingestellt. icon_wink.gif


Ich kenn das anders.

Die 3 Schichten(Presentation, Business, Integration) sind logisch, die DB selbst wäre die 4. Schicht.

Aber wer sagt denn das so etwas Standardtisiert ist


----------



## ps (8. Jul 2008)

MVC ist ein Pattern welches innerhalb eines Tiers eingesetzt werden kann (zB. im Frontend).

3-Tier-Architektur bezeichnet die Gesamtarchitektur eines Systems. Typisch, und mit anderen Worten ausgedrückt wäre da das "Frontend" welches der Benutzer bedient, das "Backend" welches die Business Logik zur Verfügung stellt und eine Schicht für die Daten - also zB. eine relationale Datenbank.

Im Prinzip hast du in einer 3-Tier-Applikation immer ein Client/Server Model.


----------



## Guest (10. Jul 2008)

Danke für die zahlreichen Antworten 

Also kann ich das jetzt so verstehen, dass MVC innerhalb einer Schicht (oder auch über mehrere) der 3-tier-Architektur genutzt werden kann.
3tier ist für die physikalische Anordnung zu nutzen und MVC für die logische.

Wenn ich nun z.B. 3 Server habe:
-nen Datenbankserver mit Datenbank, die die Daten für die Anwendung auf dem Applikationsserver hält
-nen Applikationsserver mit der eigentlichen Anwendung
-nen Webserver, wo z.B. Webapplikationen drauf laufen
ist das dann ne 3-tier-Architektur?  :bahnhof: 

Und innerhalb einer der 3 Schichten, z.B. auf dem Webserver hab ich ne Webapplikation, die JSF (JSP im Client-Browser als View, Beans für Daten, Servlet als Controller) mit nem MVC-Pattern nutzt.


----------



## SnooP (10. Jul 2008)

Korrekt soweit.


----------

