View-Controller-Logic-Service-Data-Pattern/Implementierung: Dependency Injection: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Wechseln zu:Navigation, Suche
(Die Seite wurde neu angelegt: „=Implementierung= Folgendes Klassendiagramm zeigt, wie eine Anwendung, die gemäß dem LDVCS-Paradigma implementiert wird, prinzipiell aufgebaut sein kann. [[M…“)
 
 
(16 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=Implementierung=
+
==Implementierung==
  
Folgendes Klassendiagramm zeigt, wie eine Anwendung, die gemäß dem LDVCS-Paradigma implementiert wird, prinzipiell aufgebaut sein kann.  
+
Folgendes Klassendiagramm zeigt, wie eine Anwendung, die gemäß dem  
 +
[[View-Controller-Logic-Service-Data-Pattern|VCLSD-Pattern]] implementiert wird, prinzipiell aufgebaut sein kann.  
  
[[Medium:LDVCS 01 DI Class Diagram.jpg|left|miniatur|977722px|'''LDVCS-Klassendiagramm]]
+
[[Datei:VCLSD 01 DI Class Diagram.jpg|left|miniatur|977722px|'''VCLSD-Klassendiagramm]]
  
Für jeder der fünf Komponenten (Logic, Data, Model, View, Controller) gibt es ein Interface,
+
Für jedes der fünf Module (View, Controller, Logic, Service, Data) gibt es ein Interface,
 
das die Methoden und Attribute deklariert, die diese Komponente unterstützt, sowie eine Klasse,
 
das die Methoden und Attribute deklariert, die diese Komponente unterstützt, sowie eine Klasse,
 
die das zugehörige Interface implementiert. Durch die Verwendung von Interfaces ist es ganz einfach,  
 
die das zugehörige Interface implementiert. Durch die Verwendung von Interfaces ist es ganz einfach,  
eine Komponentenimplementierung durch eine andere zu ersetzen.  
+
eine Modulimplementierung durch eine andere zu ersetzen.  
  
Jedes Interface mit Ausnahme des Interfaces <cod>I_Data</code> defniert Beziehungen  
+
Jedes Interface mit Ausnahme des Interfaces <code>I_Data</code> defniert Beziehungen  
zu anderen LDVCS-Klassen. Die Data-Komponente kommuniziert mit den anderen Komponenten
+
zu anderen VCLSD-Klassen. Das Datenmodul kommuniziert mit den anderen Modulen
 
über Signale (siehe [[Observer-Pattern]]).
 
über Signale (siehe [[Observer-Pattern]]).
  
Man beachte, dass jede andere Komponente alle Komponenten „kennt“, mit denen sie (evtl.) kommunizieren muss.
 
Die zugehörigen Part-of-Attribute können als Add-only-Attribute implementiert werden. Das heißt,
 
es ist nicht notwendig, dass die Werte dieser Attribute nach der Initialisierung
 
noch einmal von einer anderen Komponente gelesen werden müssten.
 
 
Ein wichtiger Aspekt der Implementierung ist daher die Initialisierung  
 
Ein wichtiger Aspekt der Implementierung ist daher die Initialisierung  
der Komponenten. Insbersondere müssen die Komponenten die anderen Komponenten kennen, mit
+
der Module. Insbersondere müssen die Module die anderen Module kennen, mit
 
denen sie kommunizieren sollen. Dies kann auf mehrere Arten geschehen.
 
denen sie kommunizieren sollen. Dies kann auf mehrere Arten geschehen.
  
Zum Beipiel kann es [[Singleton]]-Klassen geben, die alle Komponenten enthalten und
+
Zum Beipiel kann es [[Singleton]]-Klassen geben, die alle Module enthalten und
über die die einzelnen Komponenten die jeweils benötigten Kommunikatonspartner ermitteln.
+
über die die einzelnen Module die jeweils benötigten Kommunikatonspartner ermitteln.
 
Dieses Vorgehen hat allerdings den Nachteil, dass die Singleton-Klassen im Prinzip  
 
Dieses Vorgehen hat allerdings den Nachteil, dass die Singleton-Klassen im Prinzip  
 
globalen Variablen entsprechen: Man sieht ihnen nicht an, welche Klassen darauf zugreifen.  
 
globalen Variablen entsprechen: Man sieht ihnen nicht an, welche Klassen darauf zugreifen.  
 
Daher sollte man auf Singleton-Klassen besser verzichten.
 
Daher sollte man auf Singleton-Klassen besser verzichten.
  
Eine weitere Möglichkeit wäre, alle Komponente über Signale miteinander kommunizieren zu lassen.
+
Eine weitere Möglichkeit wäre, alle Module über Signale miteinander kommunizieren zu lassen.
Dann müssten die Komponenten sich gegenseitig gar nicht kennen (sofern alle wichtigen
+
Dann müssten die Module sich gegenseitig gar nicht kennen (sofern alle wichtigen
 
Informationen direkt in den Signalen übermittelt werden). Hier müssten bei der Initialisierung
 
Informationen direkt in den Signalen übermittelt werden). Hier müssten bei der Initialisierung
 
die Signaler und die Observer geeignet miteinander vernetzt werden. Allerdings sind
 
die Signaler und die Observer geeignet miteinander vernetzt werden. Allerdings sind
die Data-Komponentne und die Logik-Komponente i. Allg. eng miteinander verknüpft, da  
+
die Datenmodule und die Logikmodule i. Allg. eng miteinander verknüpft, da  
die Logik-Komponenten sowohl lesend, als auch schreiben auf die Date-Komponente zugreift.
+
die Logikmodule sowohl lesend, als auch schreiben auf die Datenmodule zugreift.
Hier ensteht durch das Observerpattern ein unnötiger Overhead.  
+
Hier ensteht durch das Observer-Pattern ein unnötiger Overhead.  
  
Eine letzte Möglichkeit ist es, die benötigten Komponenten per [[Dependency Injection]]  
+
Eine letzte Möglichkeit ist es, die benötigten Module per [[Dependency Injection]]  
den anderen Komponenten bekannt zu geben.
+
den anderen Modulen bekannt zu geben.
  
==Beispiele==
+
===Beispiele===
  
Beispielsimplementierungen, die das LDVCS-Prinzip umsetzen, finden Sie in den ActionScript-Tutorien:
+
Beispielsimplementierungen, die das VCLSD-Prinzip umsetzen, finden Sie in den ActionScript-Tutorien:
  
 
*[[AS3-Tutorium: Flash: Calculator]]
 
*[[AS3-Tutorium: Flash: Calculator]]
*[[AS3-Tutorium: Flash: Butterfly 10 ldvcs]]
+
*[[AS3-Tutorium: Flash: Butterfly 10 vclsd]]
  
 
Darüber hinaus gibt es für Flex 4, Flash 11 (CS5) und Flash 10 (CS4) Rahmen-Implementierungen, die Sie als Basis
 
Darüber hinaus gibt es für Flex 4, Flash 11 (CS5) und Flash 10 (CS4) Rahmen-Implementierungen, die Sie als Basis
Zeile 52: Zeile 49:
 
  |-
 
  |-
 
  | Umsetzung des Klassendiagramms in Flex 4
 
  | Umsetzung des Klassendiagramms in Flex 4
  |[http://glossar.hs-augsburg.de/beispiel/tutorium/flex_4/ldvcs/LDVCS01Flex4/]      ([http://glossar.hs-augsburg.de/webdav/tutorium/flex_4/ldvcs/LDVCS01Flex4/ SVN-Repository])
+
  |[http://glossar.hs-augsburg.de/beispiel/tutorium/flex_4/vclsdv/VCLSD01Flex4/]      ([http://glossar.hs-augsburg.de/webdav/tutorium/flex_4/vclsd/VCLSD01Flex4/ SVN-Repository])
 
  |-
 
  |-
 
  | Umsetzung des Klassendiagramms in Flash 11 (CS5)
 
  | Umsetzung des Klassendiagramms in Flash 11 (CS5)
  |[http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs5/ldvcs/LDVCS01Flash11/] ([http://glossar.hs-augsburg.de/webdav/tutorium/flash_cs5/ldvcs/LDVCS01Flash11/ SVN-Repository])
+
  |[http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs5/vclsd/VCLSD01Flash11/] ([http://glossar.hs-augsburg.de/webdav/tutorium/flash_cs5/vclsd/VCLSD01Flash11/ SVN-Repository])
 
  |-
 
  |-
 
  | Umsetzung des Klassendiagramms in Flash 10 (CS4)
 
  | Umsetzung des Klassendiagramms in Flash 10 (CS4)
  |[http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs4/ldvcs/LDVCS01Flash10/] ([http://glossar.hs-augsburg.de/webdav/tutorium/flash_cs4/ldvcs/LDVCS01Flash10/ SVN-Repository])
+
  |[http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs4/vclsd/VCLSD01Flash10/] ([http://glossar.hs-augsburg.de/webdav/tutorium/flash_cs4/vclsd/VCLSD01Flash10/ SVN-Repository])
 
|}
 
|}
  
Zeile 64: Zeile 61:
 
jedoch keine weitere Funktionalität.  
 
jedoch keine weitere Funktionalität.  
  
Wenn Sie eine eigene Anwendung auf Basis des LVCDS-Paradigmas implementieren wollen, sollten Sie sich die gewünschte Rahmen-Anwendung per Subclipse in Eclipse (bzw. Flash Builder 4)
+
Wenn Sie eine eigene Anwendung auf Basis des VCLSD-Patterns implementieren wollen, sollten Sie sich die gewünschte Rahmen-Anwendung per Subclipse in Eclipse (bzw. Flash Builder 4)
 
laden. Heben Sie anschließend die Verknüpfung zum SVN-Repository auf:
 
laden. Heben Sie anschließend die Verknüpfung zum SVN-Repository auf:
  
Zeile 72: Zeile 69:
  
 
<noinclude>
 
<noinclude>
=Quellen=
 
* [[Kowarschick, W.: Multimedia-Programmierung]]</noinclude>
 
  
=Siehe auch=
+
==Quellen==
 +
* {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}</noinclude>
 +
 
 +
==Siehe auch==
 
*[[Model-View-Controller-Paradigma]]
 
*[[Model-View-Controller-Paradigma]]
*[[Model-View-Controller-Services-Paradigma]]
+
*[[Model-View-Controller-Service-Paradigma]]
<noinclude>[[Kategorie:Objektorientierte Programmierung]]
+
<noinclude>
[[Kategorie:Glossar]][[Kategorie:MVC]]
+
[[Kategorie:MVC]]
 +
[[Kategorie:Objektorientierte Programmierung]]
 +
[[Kategorie:Glossar]]
 
[[en:LDVCS]]
 
[[en:LDVCS]]
 
[[Kategorie:Kapitel:Multimedia-Programmierung]]
 
[[Kategorie:Kapitel:Multimedia-Programmierung]]
 
{{{{SITENAME}}-konformer Artikel}}</noinclude>
 
{{{{SITENAME}}-konformer Artikel}}</noinclude>

Aktuelle Version vom 14. April 2019, 16:12 Uhr

1 Implementierung

Folgendes Klassendiagramm zeigt, wie eine Anwendung, die gemäß dem VCLSD-Pattern implementiert wird, prinzipiell aufgebaut sein kann.

VCLSD-Klassendiagramm

Für jedes der fünf Module (View, Controller, Logic, Service, Data) gibt es ein Interface, das die Methoden und Attribute deklariert, die diese Komponente unterstützt, sowie eine Klasse, die das zugehörige Interface implementiert. Durch die Verwendung von Interfaces ist es ganz einfach, eine Modulimplementierung durch eine andere zu ersetzen.

Jedes Interface mit Ausnahme des Interfaces I_Data defniert Beziehungen zu anderen VCLSD-Klassen. Das Datenmodul kommuniziert mit den anderen Modulen über Signale (siehe Observer-Pattern).

Ein wichtiger Aspekt der Implementierung ist daher die Initialisierung der Module. Insbersondere müssen die Module die anderen Module kennen, mit denen sie kommunizieren sollen. Dies kann auf mehrere Arten geschehen.

Zum Beipiel kann es Singleton-Klassen geben, die alle Module enthalten und über die die einzelnen Module die jeweils benötigten Kommunikatonspartner ermitteln. Dieses Vorgehen hat allerdings den Nachteil, dass die Singleton-Klassen im Prinzip globalen Variablen entsprechen: Man sieht ihnen nicht an, welche Klassen darauf zugreifen. Daher sollte man auf Singleton-Klassen besser verzichten.

Eine weitere Möglichkeit wäre, alle Module über Signale miteinander kommunizieren zu lassen. Dann müssten die Module sich gegenseitig gar nicht kennen (sofern alle wichtigen Informationen direkt in den Signalen übermittelt werden). Hier müssten bei der Initialisierung die Signaler und die Observer geeignet miteinander vernetzt werden. Allerdings sind die Datenmodule und die Logikmodule i. Allg. eng miteinander verknüpft, da die Logikmodule sowohl lesend, als auch schreiben auf die Datenmodule zugreift. Hier ensteht durch das Observer-Pattern ein unnötiger Overhead.

Eine letzte Möglichkeit ist es, die benötigten Module per Dependency Injection den anderen Modulen bekannt zu geben.

1.1 Beispiele

Beispielsimplementierungen, die das VCLSD-Prinzip umsetzen, finden Sie in den ActionScript-Tutorien:

Darüber hinaus gibt es für Flex 4, Flash 11 (CS5) und Flash 10 (CS4) Rahmen-Implementierungen, die Sie als Basis für die Implementierung eigener Anwendungen verwenden können:

Umsetzung des Klassendiagramms in Flex 4 [1] (SVN-Repository)
Umsetzung des Klassendiagramms in Flash 11 (CS5) [2] (SVN-Repository)
Umsetzung des Klassendiagramms in Flash 10 (CS4) [3] (SVN-Repository)

In den obigen Beispielen wurden alle im obigen Diagramm definierten Klassen und Beziehungen implementiert, jedoch keine weitere Funktionalität.

Wenn Sie eine eigene Anwendung auf Basis des VCLSD-Patterns implementieren wollen, sollten Sie sich die gewünschte Rahmen-Anwendung per Subclipse in Eclipse (bzw. Flash Builder 4) laden. Heben Sie anschließend die Verknüpfung zum SVN-Repository auf:

  • In Eclipse/Flash Builder: Klick mit rechter Maustaste auf das Projekt → Team → Disconnect → Also delete the SVN meta information from the file system. → Ja/Yes

Nun können Sie die Klassen und Pakete (mittels Refactoring) umbenennen. Ersetzen Sie am Besten in allen generischen Namen der Art Domain... den Begriff Domain durch den Namen Ihrer Anwendung. Und ersetzen Sie das Paket domain durch ein Paket mit dem (kleingeschriebenen) Namen Ihrer Anwendung.


2 Quellen

3 Siehe auch


Dieser Artikel ist GlossarWiki-konform.