Logic-Data-View-Controller-Service-Paradigma: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Kowa (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Kowa (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
=Definition=
=Definition=
Das [[Data-Service-Logic-Controller-View-Pattern]] oder [[Data-Service-Logic-Controller-View-Pattern|-Paradigma]], kurz [[DSLCV]],  bezeichnet ein [[Architekturmuster]] zur Trennung einer [[Anwendung]] in drei separate Einheiten:  
Das [[Data-Service-Logic-Controller-View-Pattern]] oder [[Data-Service-Logic-Controller-View-Pattern|-Paradigma]], kurz [[DSLCV]],  bezeichnet ein [[Architekturmuster]] zur Trennung einer [[Komponente (UML)|Anwendungs-Komponente]] in fünf separate Einheiten (Module):  
[[Logic (LDVCS)|Logic]] (Logik), [[Data (ADVCS)|Data]] (Daten), [[View (MVC)|View]] (Darstellung), [[Controller (MVC)|Controller]] (Steuerung) und [[Service (MVCS)|Service]] (Service).
[[Data (DSLCV)|Data]] (Daten), [[Service (MVCS)|Service]] (Service), [[Logic (DSLCV)|Logic]] (Logik), , [[Controller (MVC)|Controller]] (Steuerung) und [[View (MVC)|View]] (Darstellung).


=Konzept=
=Konzept=
Zeile 7: Zeile 7:
Dieses Pattern ist eine Verfeinerung des [[Model-View-Controller-Services-Pattern]]s (MVCS-Pattern).  
Dieses Pattern ist eine Verfeinerung des [[Model-View-Controller-Services-Pattern]]s (MVCS-Pattern).  


Die Modellkomponente des MVCS-Patterns übernimmt normalerweise zwei Aufgaben: Die Speicherung der Anwendungsdaten und die Realisierung der Anwendungslogik.  
Eine DLSVC-Komponente besteht im Gegensatz zum MVCS-Pattern nicht aus vier, sondern aus fünf Modulen.
Der Grund dafür ist, dass das Modell des MVCS-Patterns normalerweise zwei Aufgaben übernimmt: Die Speicherung der Anwendungsdaten und die Realisierung der Anwendungslogik.  
(Manchmal übernimmt auch der Controller die Realisierung der Anwendungslogik.)
(Manchmal übernimmt auch der Controller die Realisierung der Anwendungslogik.)
Im DSLCV-Pattern wird die Modellkomponente in zwei Komponenten aufgeteilt: eine Datenkomponente (Data) und eine Logikkomponente (Logic).
Im DSLCV-Pattern wird die Modellkomponente daher in zwei Komponenten aufgeteilt: eine Datenkomponente (Data) und eine Logikkomponente (Logic).
Der Controller darf nun nicht mehr direkt schreibend auf die Datenkomponente zugreifen. Dies ist jetzt die Aufgabe der Logikkomponenten (und evtl. der Servicekomponente).
Der Controller darf nun nicht mehr direkt schreibend auf die Datenkomponente zugreifen. Dies ist jetzt die Aufgabe der Logikkomponenten (und evtl. der Servicekomponente).


Zeile 42: Zeile 43:
wird hierbei bachtet: Jede Aufgabe wird von einer eigenen Komponente bearbeitet.
wird hierbei bachtet: Jede Aufgabe wird von einer eigenen Komponente bearbeitet.


Ein Jump'n'Run-Spiel beispielsweise, das derartig modular aufgebaut ist, kann sehr leicht an neue Gegebenheiten angepasst werden.
Beispielsweise kann ein Jump'n'Run-Spiel, das derartig modular aufgebaut ist, sehr leicht an neue Gegebenheiten angepasst werden.
Jede der folgenden Änderungen hat lediglich Auswirkungen auf eine der fünf Komponenten:
Jede der folgenden Änderungen hat lediglich Auswirkungen auf eine der fünf Module:


# Änderung der Darstellung (d.h. der View): Die View kann jederzeit durch neue [[Skin]]s aktualisiert werden. Es ist auch möglich, die 2D-Ansicht des Spiels durch eine Pseudo-3D-Ansicht zu ersetzen. Bei einem Multiuser-Spiel hat sowieso jeder Spieler seine eigene Sicht auf die Szenerie.  
# Änderung der Darstellung (d.h. der View): Die View kann jederzeit durch neue [[Skin]]s aktualisiert werden. Es ist auch möglich, die 2D-Ansicht des Spiels durch eine Pseudo-3D-Ansicht zu ersetzen. Bei einem Multiuser-Spiel hat sowieso jeder Spieler seine eigene Sicht auf die Szenerie.  
# Änderung der Spielsteuerung (d.h. des Controllers): Anstelle einer Steuerung der Spielfigur durch die Tastatur kann beispielsweise eine Steuerung der Spielfigur durch eine WiiMote erfolgen.
# Änderung der Spielsteuerung (d.h. des Controllers): Anstelle einer Steuerung der Spielfigur durch die Tastatur kann beispielsweise eine Steuerung der Spielfigur durch eine [[WiiMote]] erfolgen.
# Änderung der Spiellogik (d.h. der Logikkomponente): Die KI-Engine zur Steuerung der Gegener kann beispielsweise durch eine bessere Engine ersetzt werden.
# Änderung der Spiellogik (d.h. der Logikkomponente): Die KI-Engine zur Steuerung der Gegener kann beispielsweise durch eine bessere Engine ersetzt werden.
# Änderung der Dateninitialisierung (d.h. der Service-Komponente): Wenn die Dateninitialisierung künfig beispielsweise nicht mehr über XML, sondern über SQL erfolgen soll, muss ledichlich die entsprechende Service-Komponente ausgetauscht werden.
# Änderung der Dateninitialisierung (d.h. der Service-Komponente): Wenn die Dateninitialisierung künfig beispielsweise nicht mehr über XML, sondern über SQL erfolgen soll, muss ledichlich die entsprechende Service-Komponente ausgetauscht werden.
# Änderung des Spielservers (d.h. der Service-Komponente): Es ist jederzeit möglich, ein Multi-User-Spiel über einen anderen Server (mit einer anderen Architektur) laufen zulassen.
# Änderung des Spielservers (d.h. der Service-Komponente): Es ist jederzeit möglich, ein Multi-User-Spiel über einen anderen Server (mit einer anderen Architektur) laufen zu lassen.


Auch die Datenkomponente kann ausgetauscht werden, wenn z.B. andere Datenstrukturen zur Speicherung der Daten eingesetzt werden sollen.
Auch die Datenkomponente kann ausgetauscht werden, wenn z.B. andere Datenstrukturen zur Speicherung der Daten eingesetzt werden sollen.
Es ist auch möglich, einer Datenkomponente Filter vorzuschalten (vgl. [[Aspektorientierte Programmierung]]). Zum Beispiel kann auf diese Weise ine Login-Mechanismus realisiert werden:   
Es ist darüber hinaus möglich, einer Datenkomponente Filter vorzuschalten (vgl. [[Aspektorientierte Programmierung]]). Zum Beispiel kann auf diese Weise ine Login-Mechanismus realisiert werden:   
Der Zugriff auf bestimmte Daten wird erst dann erlaubt,  
Der Zugriff auf bestimmte Daten wird erst dann erlaubt,  
wenn ein Login-Vorgang erfolgreich abgschlossen wurde.
wenn ein Login-Vorgang erfolgreich abgschlossen wurde.


= Verfeinerung des DSLCV-Prozesses=
= Verfeinerung des DSLCV-Prozesses=
Genauso wie der [[Model-View-ControllerProzess|MVC-Prozess]] und der [[Model-View-Controller-Service-Prozess|MVCS-Prozess]] kann auch der DSLCV-Prozess verfeinert werden. Auch hier bietet sich die Aufteilung
Genauso wie der [[Model-View-ControllerProzess|MVC-Prozess]] und der [[Model-View-Controller-Service-Prozess|MVCS-Prozess]] kann auch der DSLCV-Prozess verfeinert werden. Auch hier  
in Kernawendungen (Domains) und eine Rahmenanwendung (Frame) an, die den Zugang zu den Kernanwendungen steuert.
kann eine „äußere DSLCV-Komponente“ eine „innere DSLCV-Komponente“ verwenden:
In diesem Fall gibt es mehrere relativ unabhängige DSLCV-Prozesse: Die Rahmenkomponente darf auf zugehörigen Kernkomponenten zugreifen.
Die Module der äußeren Komponente dürfen auf die Module der inneren Komponente zugreifen.
Der umgekehrte Weg sollte allerdings vermieden werden, damit die Kernanwendungen problemlos in andere Umgebungen integriert werden können.
Der umgekehrte Weg sollte allerdings vermieden werden, damit die innere Komponente problemlos in andere Umgebungen integriert werden können.


[[Medium:DSLCV-Prozess 02.png|gerahmt|links|DSLCV-Prozess 2 (mit Trennung in Frame und Domain)]]
[[Medium:DSLCV-Prozess 02.png|gerahmt|links|DSLCV-Prozess 2 (mit Trennung in eine äußere und eine innere Komponente)]]
 
 
==Beispiel „Spiel mit Highscore-Verwaltung“==
==Beispiel „Spiel mit Highscore-Verwaltung“==
Wenn man ein „Spiel mit Highscore-Verwaltung“ realisieren möchte, sollte man zwei unanhängige Kernanwendungen schreiben.
Wenn man ein „Spiel mit Highscore-Verwaltung“ realisieren möchte, sollte man zwei unanhängige Komponenten schreiben:
Das Spiel selbst und eine spielunabhängige Highscore-Verwaltung. Die Rahmenanwendung verknüpft diese beiden Anwendungen.
Das Spiel selbst und eine spielunabhängige Highscore-Verwaltung. Eine dritte Komponenten, die so genannnte Rahmenkomponente verknüpft diese beiden Anwendungen.


Die Rahmenanwendung liest beispielsweise bei
Die Rahmenkomponente liest beispielsweise bei
Spielende die erreichten Punkte aus dem Spielmodell aus und leitet diese an das Highscore-Modell weiter.
Spielende die erreichten Punkte aus dem Modell der Spielkomponente aus und leitet diese an das Highscore-Modell weiter.
Eine weitere Möglichkeit wäre, dass die Rahmenanwendung über die Highscore-Anwendung ermittelt,
Eine weitere Möglichkeit wäre, dass die Rahmenkomponente über die Highscore-Anwendung ermittelt,
ob der Spieler schon mindestens fünf Level erfolgreich gespielt hat. Nur in diesem Fall gewährt sie den Zugang zum Trainingsmodus des Spiels.
ob der Spieler schon mindestens fünf Level erfolgreich gespielt hat. Nur in diesem Fall gewährt sie den Zugang zum Trainingsmodus des Spiels.



Version vom 4. April 2011, 12:45 Uhr

Definition

Das Data-Service-Logic-Controller-View-Pattern oder -Paradigma, kurz DSLCV, bezeichnet ein Architekturmuster zur Trennung einer Anwendungs-Komponente in fünf separate Einheiten (Module): Data (Daten), Service (Service), Logic (Logik), , Controller (Steuerung) und View (Darstellung).

Konzept

gerahmt||rechts|DSLCV-Prozess Dieses Pattern ist eine Verfeinerung des Model-View-Controller-Services-Patterns (MVCS-Pattern).

Eine DLSVC-Komponente besteht im Gegensatz zum MVCS-Pattern nicht aus vier, sondern aus fünf Modulen. Der Grund dafür ist, dass das Modell des MVCS-Patterns normalerweise zwei Aufgaben übernimmt: Die Speicherung der Anwendungsdaten und die Realisierung der Anwendungslogik. (Manchmal übernimmt auch der Controller die Realisierung der Anwendungslogik.) Im DSLCV-Pattern wird die Modellkomponente daher in zwei Komponenten aufgeteilt: eine Datenkomponente (Data) und eine Logikkomponente (Logic). Der Controller darf nun nicht mehr direkt schreibend auf die Datenkomponente zugreifen. Dies ist jetzt die Aufgabe der Logikkomponenten (und evtl. der Servicekomponente).

Der DSLCV-Prozess

Beispiel Jump 'n' Run

In einem Jump-'n'-Run-Spiel werden Daten (Data) über die Spielfigur (Position, Laufrichtung, Geschwindigkeit ...), die Gegner, die Gegenstände etc. gespeichert.

Die View' visualisiert die Elemente des Spiels mit Hilfe von Bildern und Animationen (Walk cyles etc.). Jede Änderung an den Daten hat, sofern sie sich im für den Spieler sichtbaren Bereich befindet, eine Anpassung der View zur Folge.

Der Spieler steuert die Spielfigur mit Hilfe der Tastatur. Jeder Tastendruck wird vom Controller analysiert und zur Manipulation der Spielfigur an die Logik-Komponente (Logic) weitergeleitet.

Man beachte, dass die Logik-Komponente i. Allg. aktiv sein kann: Sie kann die Daten selbstständig, d.h. auch ohne Manipultation durch den Controller verändern. Beispielsweise werden die gegnerischen Figuren, sofern es welche gibt, direkt von der Logik-Komponente gesteuert.

Mit Hilfe einer Service-Komponente (Service) kann das Spiel zu einem Multiuser-Spiel erweitert werden. Die Service-Komponente hat dann zwei Aufgaben:

  1. Die Position des Avatars (d.h. der eigenen Spielfigur) an einen zentralen Server zu übertragen.
  2. Die Postition anderer Spielfiguren und möglicher Gegner vom zentralen Server zu holen und in die eigene Datenkomponente zu schreiben.

Eine weitere typische Aufgabe der Service-Komponente ist es, die Daten-Komponente bei Programmstart zu initialisieren. Zu diesem Zweck sollten die Service-Komponente eine Initialisierungsmethode implementieren, die vom Hauptprogramm direkt aufgerufen wird, nachdem die Daten- und die Service-Komponete erzeugt wurden.

Modularität

Der große Vorteil des DSLCV-Patterns ist die Modularität. Das PrinzipSeparation of Concerns“ wird hierbei bachtet: Jede Aufgabe wird von einer eigenen Komponente bearbeitet.

Beispielsweise kann ein Jump'n'Run-Spiel, das derartig modular aufgebaut ist, sehr leicht an neue Gegebenheiten angepasst werden. Jede der folgenden Änderungen hat lediglich Auswirkungen auf eine der fünf Module:

  1. Änderung der Darstellung (d.h. der View): Die View kann jederzeit durch neue Skins aktualisiert werden. Es ist auch möglich, die 2D-Ansicht des Spiels durch eine Pseudo-3D-Ansicht zu ersetzen. Bei einem Multiuser-Spiel hat sowieso jeder Spieler seine eigene Sicht auf die Szenerie.
  2. Änderung der Spielsteuerung (d.h. des Controllers): Anstelle einer Steuerung der Spielfigur durch die Tastatur kann beispielsweise eine Steuerung der Spielfigur durch eine WiiMote erfolgen.
  3. Änderung der Spiellogik (d.h. der Logikkomponente): Die KI-Engine zur Steuerung der Gegener kann beispielsweise durch eine bessere Engine ersetzt werden.
  4. Änderung der Dateninitialisierung (d.h. der Service-Komponente): Wenn die Dateninitialisierung künfig beispielsweise nicht mehr über XML, sondern über SQL erfolgen soll, muss ledichlich die entsprechende Service-Komponente ausgetauscht werden.
  5. Änderung des Spielservers (d.h. der Service-Komponente): Es ist jederzeit möglich, ein Multi-User-Spiel über einen anderen Server (mit einer anderen Architektur) laufen zu lassen.

Auch die Datenkomponente kann ausgetauscht werden, wenn z.B. andere Datenstrukturen zur Speicherung der Daten eingesetzt werden sollen. Es ist darüber hinaus möglich, einer Datenkomponente Filter vorzuschalten (vgl. Aspektorientierte Programmierung). Zum Beispiel kann auf diese Weise ine Login-Mechanismus realisiert werden: Der Zugriff auf bestimmte Daten wird erst dann erlaubt, wenn ein Login-Vorgang erfolgreich abgschlossen wurde.

Verfeinerung des DSLCV-Prozesses

Genauso wie der MVC-Prozess und der MVCS-Prozess kann auch der DSLCV-Prozess verfeinert werden. Auch hier kann eine „äußere DSLCV-Komponente“ eine „innere DSLCV-Komponente“ verwenden: Die Module der äußeren Komponente dürfen auf die Module der inneren Komponente zugreifen. Der umgekehrte Weg sollte allerdings vermieden werden, damit die innere Komponente problemlos in andere Umgebungen integriert werden können.

gerahmt|links|DSLCV-Prozess 2 (mit Trennung in eine äußere und eine innere Komponente)  

Beispiel „Spiel mit Highscore-Verwaltung“

Wenn man ein „Spiel mit Highscore-Verwaltung“ realisieren möchte, sollte man zwei unanhängige Komponenten schreiben: Das Spiel selbst und eine spielunabhängige Highscore-Verwaltung. Eine dritte Komponenten, die so genannnte Rahmenkomponente verknüpft diese beiden Anwendungen.

Die Rahmenkomponente liest beispielsweise bei Spielende die erreichten Punkte aus dem Modell der Spielkomponente aus und leitet diese an das Highscore-Modell weiter. Eine weitere Möglichkeit wäre, dass die Rahmenkomponente über die Highscore-Anwendung ermittelt, ob der Spieler schon mindestens fünf Level erfolgreich gespielt hat. Nur in diesem Fall gewährt sie den Zugang zum Trainingsmodus des Spiels.

Implementierung

Das DSLCV-Pattern lässt sich auf mehrere Arten implementieren:

Quellen

Siehe auch


Dieser Artikel ist GlossarWiki-konform.