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

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
Zeile 1: Zeile 1:
=Implementierung=
#REDIRECT [[Spielwiese:Test]]


Folgendes Klassendiagramm zeigt, wie eine Anwendung, die gemäß dem
[[View-Controller-Logic-Service-Data-Pattern|VCLSD-Pattern]] implementiert wird, prinzipiell aufgebaut sein kann.
[[Datei:VCLSD 01 DI Class Diagram.jpg|left|miniatur|977722px|'''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 <cod>I_Data</code> 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.
==Beispiele==
Beispielsimplementierungen, die das VCLSD-Prinzip umsetzen, finden Sie in den ActionScript-Tutorien:
*[[AS3-Tutorium: Flash: Calculator]]
*[[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
für die Implementierung eigener Anwendungen verwenden können:
{|border="1" cellpadding="4" style="margin:1em 1em 1em 0; background:#f9f9f9; border:1px #AAA solid; border-collapse:collapse; empty-cells:show"
|-
| Umsetzung des Klassendiagramms in Flex 4
|[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)
|[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)
|[http://glossar.hs-augsburg.de/beispiel/tutorium/flash_cs4/vclsd/VCLSD01Flash10/] ([http://glossar.hs-augsburg.de/webdav/tutorium/flash_cs4/vclsd/VCLSD01Flash10/ 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 <code>Domain...</code> den Begriff <code>Domain</code> durch den Namen Ihrer Anwendung. Und ersetzen Sie das Paket <code>domain</code> durch ein Paket mit dem (kleingeschriebenen) Namen Ihrer Anwendung.
<noinclude>
=Quellen=
* {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}</noinclude>
=Siehe auch=
*[[Model-View-Controller-Paradigma]]
*[[Model-View-Controller-Service-Paradigma]]
<noinclude>
[[Kategorie:MVC]]
[[Kategorie:Objektorientierte Programmierung]]
[[Kategorie:Glossar]]
[[en:LDVCS]]
[[Kategorie:Kapitel:Multimedia-Programmierung]]
{{{{SITENAME}}-konformer Artikel}}</noinclude>

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

Weiterleitung nach: