|
|
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| =Implementierung=
| | #REDIRECT [[Spielwiese:Test]] |
|
| |
|
| Folgendes Klassendiagramm zeigt, wie eine Anwendung, die gemäß dem
| |
| [[Data-Service-Logic-Controllers-View-Pattern|DSLCV-Pattern]] implementiert wird, prinzipiell aufgebaut sein kann.
| |
|
| |
| [[Medium:LDVCS 01 DI Class Diagram.jpg|left|miniatur|977722px|'''LDVCS-Klassendiagramm]]
| |
|
| |
| Für jeder der fünf Komponenten (Logic, Data, Model, View, Controller) 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 Komponentenimplementierung durch eine andere zu ersetzen.
| |
|
| |
| Jedes Interface mit Ausnahme des Interfaces <cod>I_Data</code> defniert Beziehungen
| |
| zu anderen LDVCS-Klassen. Die Data-Komponente kommuniziert mit den anderen Komponenten
| |
| ü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
| |
| der Komponenten. Insbersondere müssen die Komponenten die anderen Komponenten kennen, mit
| |
| denen sie kommunizieren sollen. Dies kann auf mehrere Arten geschehen.
| |
|
| |
| Zum Beipiel kann es [[Singleton]]-Klassen geben, die alle Komponenten enthalten und
| |
| über die die einzelnen Komponenten 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 Komponente über Signale miteinander kommunizieren zu lassen.
| |
| Dann müssten die Komponenten 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 Data-Komponentne und die Logik-Komponente i. Allg. eng miteinander verknüpft, da
| |
| die Logik-Komponenten sowohl lesend, als auch schreiben auf die Date-Komponente zugreift.
| |
| Hier ensteht durch das Observerpattern ein unnötiger Overhead.
| |
|
| |
| Eine letzte Möglichkeit ist es, die benötigten Komponenten per [[Dependency Injection]]
| |
| den anderen Komponenten bekannt zu geben.
| |
|
| |
| ==Beispiele==
| |
|
| |
| Beispielsimplementierungen, die das LDVCS-Prinzip umsetzen, finden Sie in den ActionScript-Tutorien:
| |
|
| |
| *[[AS3-Tutorium: Flash: Calculator]]
| |
| *[[AS3-Tutorium: Flash: Butterfly 10 ldvcs]]
| |
|
| |
| 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/ldvcs/LDVCS01Flex4/] ([http://glossar.hs-augsburg.de/webdav/tutorium/flex_4/ldvcs/LDVCS01Flex4/ SVN-Repository])
| |
| |-
| |
| | 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])
| |
| |-
| |
| | 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])
| |
| |}
| |
|
| |
| 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 LVCDS-Paradigmas 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=
| |
| * [[Kowarschick, W.: Multimedia-Programmierung]]</noinclude>
| |
|
| |
| =Siehe auch=
| |
| *[[Model-View-Controller-Paradigma]]
| |
| *[[Model-View-Controller-Services-Paradigma]]
| |
| <noinclude>[[Kategorie:Objektorientierte Programmierung]]
| |
| [[Kategorie:Glossar]][[Kategorie:MVC]]
| |
| [[en:LDVCS]]
| |
| [[Kategorie:Kapitel:Multimedia-Programmierung]]
| |
| {{{{SITENAME}}-konformer Artikel}}</noinclude>
| |