Model-View-Controller-Paradigma: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Kowa (Diskussion | Beiträge)
Kowa (Diskussion | Beiträge)
Zeile 4: Zeile 4:


=Bemerkungen=
=Bemerkungen=
==Geschichte==
In den Anfängen der Informatik war es nicht unüblich [[Spaghetti-Code]] zu entwickeln, was mit vielen Nachteilen verbunden ist. Erst die Einführung der strukturierten Programmierung in den 70er-Jahren und später die objektorientierte Programmierung in den 80er-Jahren schaffte Abhilfe und ermöglichte das Programmieren nach dem Model-View-Controller Paradigma.
Ursprünglich wurde das MVC-Paradigma 1978/79 von der Firma Xerox für die [[GUI]]-Programmierung eingeführt. Zum Einsatz kam die damals ebenfalls von Xerox entwickelte [[Objektorientierung|objektorientierte]] Programmiersprache [[Smalltalk]].
In neueren Programmiersprachen wie [[Java]] kommt MVC ebenfalls bei der [[GUI]]-Programmierung zum Einsatz. MVC ist heute allgemeiner Standard beim Entwurf komplexer Softwaresysteme, bei denen die Anwendungslogik von anderen Teilen des Systems getrennt werden soll.
==Vorteile==
==Vorteile==


Zeile 28: Zeile 21:
* Erheblicher Mehraufwand bei kleinen Applikationen.
* Erheblicher Mehraufwand bei kleinen Applikationen.


==Konzept==
==Geschichte==
Es gibt kein hundertprozentiges Patentrezept, wie MVC umzusetzen ist. Je nach Anwendungsgebiet sind manche Komponenten wichtiger als andere. Auch kann nicht immer pauschal festgelegt werden, wo gewisse Funktionen eindeutig hingehören, da weitere Aspekte der Planung und des Entwurfs die Entscheidung beeinflussen können. Zum Beispiel kann es sinnvoll sein, aus Sicherheitsgründen eine Benutzerauthentifizierung einer Webanwendung nicht im Controller sondern im Modell abzulegen.
In den Anfängen der Informatik war es nicht unüblich [[Spaghetti-Code]] zu entwickeln, was mit vielen Nachteilen verbunden ist. Erst die Einführung der strukturierten Programmierung in den 70er-Jahren und später die objektorientierte Programmierung in den 80er-Jahren schaffte Abhilfe und ermöglichte das Programmieren nach dem Model-View-Controller Paradigma.
 
Ursprünglich wurde das MVC-Paradigma 1978/79 von der Firma Xerox für die [[GUI]]-Programmierung eingeführt. Zum Einsatz kam die damals ebenfalls von Xerox entwickelte [[Objektorientierung|objektorientierte]] Programmiersprache [[Smalltalk]].


----
In neueren Programmiersprachen wie [[Java]] kommt MVC ebenfalls bei der [[GUI]]-Programmierung zum Einsatz. MVC ist heute allgemeiner Standard beim Entwurf komplexer Softwaresysteme, bei denen die Anwendungslogik von anderen Teilen des Systems getrennt werden soll.


=Konzept=
Es gibt kein hundertprozentiges Patentrezept, wie MVC umzusetzen ist. Je nach Anwendungsgebiet sind manche Komponenten wichtiger als andere. Auch kann nicht immer pauschal festgelegt werden, wo gewisse Funktionen eindeutig hingehören, da weitere Aspekte der Planung und des Entwurfs die Entscheidung beeinflussen können. Zum Beispiel kann es sinnvoll sein, aus Sicherheitsgründen eine Benutzerauthentifizierung einer Webanwendung nicht im Controller sondern im Modell abzulegen.
Im Prinzip lassen sich die Bereiche jedoch grob eingrenzen:
Im Prinzip lassen sich die Bereiche jedoch grob eingrenzen:


Zeile 46: Zeile 43:
Der Controller nimmt Eingaben aus verschiedensten Quellen entgegen und leitet diese standardisiert auf das Modell weiter. Er ist somit eine weitere Abstraktionsschicht, der Interaktionen des Benutzers mit der View wieder dem Modell zuführt.  
Der Controller nimmt Eingaben aus verschiedensten Quellen entgegen und leitet diese standardisiert auf das Modell weiter. Er ist somit eine weitere Abstraktionsschicht, der Interaktionen des Benutzers mit der View wieder dem Modell zuführt.  


==Anwendungsgebiete==
=Anwendungsgebiete=
* allgemein: größere Softwareprojekte
* Allgemein: größere Softwareprojekte
* [[GUI|GUI]]-Programmierung (bspw. [[Framework|Frameworks]] wie [[Swing|Swing]])
* [[GUI]]-Programmierung (bspw. [[Framework|Frameworks]] wie [[Swing|Swing]])
* Webanwendungen (bspw. [[Framework|Frameworks]] wie [[Ruby on Rails]])
* Web-Anwendungen (bspw. [[Framework|Frameworks]] wie [[Ruby on Rails]])
 
=MVC-Implementierungen=
 
===ABAP Objects===
* [[SAP NetWeaver Application Server|Business Server Pages]] (BSP)
* [[Web Dynpro ABAP]]
 
===ASP===
*[[ASP Xtreme Evolution (AXE)]]
 
===C++===
*[[Wt - Web toolkit]]
 
===CFML — Adobe ColdFusion, Railo (Java) und Open BlueDragon (Java) ===
* [http://www.coldbox.org ColdBox]
*[[ColdFusion on Wheels]]
*[[Fusebox]]
*[[Mach-II]]
*[[Model-Glue]
*[[PureMVC]] für ColdFusion.
 
===Erlang===
* [http://www.chicagoboss.org/ Chicago Boss]
 
===Flash/Flex===
* [[Cairngorm]]
* [[HydraMVC]]
* [[Mate]]
* [[PureMVC]] für ActionScript 2 und ActionScript 3
 
===Groovy===
* [[Grails]]
 
===Java===
* [[Aranea]]
* [[Cocoon]] (Web-Server)
* [http://www.inductionframework.org Induction]
* [[JavaServer Faces]]
* [[LongJump]]
* [[Oracle Application Framework]]
* [[PureMVC]] für Java
* [[Apache Sling]] basiert auf [[JCR]]. Unterstützt [[JSP]], [[JavaScript]], [[Ruby]], [[Apache Velocity]]
* [[Spring MVC Framework]]
* [[Apache Struts]]
* [[Apache Struts2]]
* [[Stripes]]
* [[Tapestry]]
* [http://vraptor.caelum.com.br VRaptor]
* [http://www.infoworld.com/article/08/04/17/16TC-wavemaker-studio_1.html Wavemaker], a WYSIWYG development platform for Ajax web applications.<ref>{{cite web
* [[WebObjects]]
* [[Apache WebWork 2]]
* [[Wicket]]
* [[Web Dynpro]]
 
===JavaScript===
 
* [[SproutCore]]
* [[PureMVC]] für JavaScript
* [[Woozoo]]für das [[Prototype JavaScript Framework]]
* [[Broke Web Framework]] basierend auf [[Django]]
* [http://www.javascriptmvc.com JavascriptMVC]
 
===Lua===
*[[Orbit]]
 
===.NET===
*[[ASP.NET MVC Framework]]
*[[Maverick.NET]]
*[[MonoRail]]
*[[PureMVC]] für C#
*[[Spring Framework]].NET
*[[NFX Framework]]
*[[Bistro Framework]]
 
===Perl===
*[[Catalyst]]
*[http://cgi-app.org/ CGI::Application] basierend auf [[CGI.pm]]
*[[Maypole]]
*[[MasonX::MiniMVC]]
===PHP===
*[[Akelos PHP Framework]]
*[[CakePHP]]
*[[CodeIgniter]]
*[http://code.google.com/p/codelighter/ CodeLighter]
*[http://europaphp.org/ EuropaPHP]
*[[Exponent CMS]] ([[CMS]])
*[[eZ Publish]]
*[http://flow3.typo3.org FLOW3]
*[[FUSE]]
*[[Jelix]]
*[[Jaws Project|Jaws]]
*[[Joomla!]] ([[CMS]])
*[http://kohanaphp.com Kohana]
*[[Kumbia PHP Framework]]
*[http://github.com/jbyington/lightmvc LightMVC]
*[[LISA MVC]]
*[[Micro CMS]] ([[CMS]])
*[[Odin Assemble]]
*[[Orinoco Framework]]
*[[PHP Fat-Free Framework]]
*[[PHPonTrax]]
*[[phpXCore]
*[[PureMVC]] für PHP
*[http://qcu.be/ QCubed]
*[[SilverStripe]]
*[[Solar]]
*[[Switch board ]]
*[[Symfony Framework]]
*[[Yii]]
*[[SimpleTools]]
*[[Zend Framework]]
*[[ZNF]
*[[Zoop Framework]]
 
===Python===
*[[Django]]
*[[Enthought Tool Suite]]
*[[Pylons]]
*[[TurboGears]] für Python
*[[web2py]]
*[[Zope]] Web Application Server
*[[Plone]] Content Management System basierend auf Zope
*[[PureMVC]] für Python
*[[Pygtkmvc]]
*[[mvckit]]
 
===Ruby===
*[[Camping]]
*[[Merb]]
*[[Nitro]]
*[[Ramaze]]
*[[Ruby on Rails]]
*[[Monkeybars]]
*[[PureMVC]] für Ruby.
 
===Smalltalk===
*[[AIDA/Web]]
 
==XML==
* [[XForms]]: Model–View–Controller-Architektur


=Quellen=
=Quellen=

Version vom 12. Mai 2010, 08:10 Uhr

Definition

Das Model-View-Controller-Paradigma oder -Pattern, kurz MVC, bezeichnet ein Architekturmuster zur Trennung eines Programms in drei separate Einheiten: Datenmodell (Model), Präsentation (View) und Programmsteuerung (Controller).

Bemerkungen

Vorteile

Das MVC-Paradigma ermöglicht ein flexibles Programmdesign, welches die Wiederverwendbarkeit der einzelnen Komponenten und eine reduzierte Komplexität gewährleistet, insbesondere bei großen Anwendungen. Folgende Vorteile ergeben sich hieraus:

  • Gut strukturiertes Design durch klare Trennung der Anwendungslogik von den dazugehörenden Daten und der Benutzerinteraktion.
  • Änderungen an einer Komponente sind möglich, ohne dass andere Komponenten davon betroffen werden; sogar ganze Komponenten können ausgetauscht werden.
  • Mehrere Ansichten des Systems können durch Austausch verschiedener Views realisiert werden.
  • Im Fehlerfall ist die Suche nach dem Fehler in der Regel auf eine Komponente beschränkt.
  • Erweiterbarkeit bestehender Systeme, indem neue Komponenten hinzugefügt werden. Alte Komponenten können aus Kompatibilitätsgründen erhalten bleiben.

Insgesamt sind Programmcode und Komponenten übersichtlicherer und einfacher zu warten, zu ändern und auszutauschen.

Nachteile

Auch wenn die Vorteile überwiegen, gibt es dennoch ein paar Nachteile:

  • Bei der Planung und Implementierung ist wesentlich mehr Gründlichkeit erforderlich.
  • Erheblicher Mehraufwand bei kleinen Applikationen.

Geschichte

In den Anfängen der Informatik war es nicht unüblich Spaghetti-Code zu entwickeln, was mit vielen Nachteilen verbunden ist. Erst die Einführung der strukturierten Programmierung in den 70er-Jahren und später die objektorientierte Programmierung in den 80er-Jahren schaffte Abhilfe und ermöglichte das Programmieren nach dem Model-View-Controller Paradigma.

Ursprünglich wurde das MVC-Paradigma 1978/79 von der Firma Xerox für die GUI-Programmierung eingeführt. Zum Einsatz kam die damals ebenfalls von Xerox entwickelte objektorientierte Programmiersprache Smalltalk.

In neueren Programmiersprachen wie Java kommt MVC ebenfalls bei der GUI-Programmierung zum Einsatz. MVC ist heute allgemeiner Standard beim Entwurf komplexer Softwaresysteme, bei denen die Anwendungslogik von anderen Teilen des Systems getrennt werden soll.

Konzept

Es gibt kein hundertprozentiges Patentrezept, wie MVC umzusetzen ist. Je nach Anwendungsgebiet sind manche Komponenten wichtiger als andere. Auch kann nicht immer pauschal festgelegt werden, wo gewisse Funktionen eindeutig hingehören, da weitere Aspekte der Planung und des Entwurfs die Entscheidung beeinflussen können. Zum Beispiel kann es sinnvoll sein, aus Sicherheitsgründen eine Benutzerauthentifizierung einer Webanwendung nicht im Controller sondern im Modell abzulegen. Im Prinzip lassen sich die Bereiche jedoch grob eingrenzen:

Model

Das Modell speichert als zentrale Komponente sämtliche Daten und enthält die Applikationslogik. Die Kommunikation nach außen (außerhalb der Anwendung) findet ebenso im Modell statt. Beispielsweise Zugriffe auf Datenbanken oder auch Kommunikation mit anderen Anwendungen. Zudem speichert das Modell den aktuellen Anwendungsstatus, also den Zustand, in dem sich die Anwendung bei der Interaktion mit dem Benutzer befindet.

Eine weitere Aufgabe des Modells ist das Verwalten der Views, die es zu benachrichtigen gilt, wenn sich der Zustand des Modells ändert. Änderungen werden unmittelbar mitgeteilt. Oftmals wird hierfür das Observer Design Pattern verwendet.

View

Die View ist die zuständige Komponente für die Ausgabe und bildet eine Abstraktionsschicht zwischen der Präsentation der Anwendung, dem Modell und dem Benutzer. Es können mehrere Views ein und dasselbe Modell auf technische oder optische Art und Weise repräsentieren. Verschiedene logische Sichtweisen bleiben dem Modell vorbehalten (bspw. verschiedene Benutzeransichten: Administrator, Normaluser).

Controller

Der Controller nimmt Eingaben aus verschiedensten Quellen entgegen und leitet diese standardisiert auf das Modell weiter. Er ist somit eine weitere Abstraktionsschicht, der Interaktionen des Benutzers mit der View wieder dem Modell zuführt.

Anwendungsgebiete

MVC-Implementierungen

ABAP Objects

ASP

C++

CFML — Adobe ColdFusion, Railo (Java) und Open BlueDragon (Java)

Erlang

Flash/Flex

Groovy

Java

JavaScript

Lua

.NET

Perl

PHP

Python

Ruby

Smalltalk

XML

  • XForms: Model–View–Controller-Architektur

Quellen

Siehe auch

Flash/Flex


Dieser Artikel ist GlossarWiki-konform.