15.02.2013 Aufrufe

b2aat6n

b2aat6n

b2aat6n

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

[Abb. 10] Controls<br />

im Panel.<br />

sem Panel entfernt werden. Um dies zu<br />

vereinfachen, ist das zugehörige Panel an<br />

der Tag-Eigenschaft des Buttons gesetzt. So<br />

„weiß“ der Button, zu welchem Panel er<br />

gehört und kann dieses aus dem umschließenden<br />

Panel entfernen.<br />

Wird im Portal die Schaltfläche Generieren<br />

angeklickt, muss für jede Spaltenbeschreibung<br />

eine ColumnDefinition erzeugt<br />

werden, um dann die Testdaten zu generieren.<br />

Dazu wird die Liste der Spaltenbeschreibungen<br />

im statischen Panel durchlaufen.<br />

Darin befindet sich jeweils ein Textfeld,<br />

das den Namen der Spalte enthält. Ferner<br />

befindet sich im Platzhalterpanel ein<br />

Control, in dem die Parameter für den Generator<br />

enthalten sind. In der Dropdownliste<br />

enthält das SelectedItem eine Spalten-<br />

Definition, aus der sich die ColumnDefinition<br />

erstellen lässt. Dazu wird aus der SpaltenDefinition<br />

die Funktion zum Erzeugen<br />

der ColumnDefinition aufgerufen.<br />

Insgesamt hat das Erstellen des Portals<br />

knapp zwei Stunden in Anspruch genommen.<br />

Automatisierte Tests habe ich dazu<br />

fast keine erstellt. Diese würde ich allerdings<br />

in einem „echten“ Projekt im Nachhinein<br />

ergänzen, da die Logik für den dynamischen<br />

Aufbau des Portals doch recht<br />

umfangreich geworden ist. Um hier bei<br />

späteren Erweiterungen Fehler auszuschließen,<br />

würde ich die typischen Bedienungsschritte<br />

eines Anwenders automatisiert<br />

testen.<br />

Host<br />

Am Ende benötigen wir für die gesamte<br />

Anwendung noch eine EXE-Datei, mit der<br />

die Anwendung gestartet werden kann.<br />

Aufgabe dieses Hosts ist es, die benötigten<br />

Komponenten zu beschaffen und sie den<br />

Abhängigkeiten gemäß zu verbinden. Die<br />

Abhängigkeiten sind hier in Form von Konstruktorparametern<br />

modelliert. Folglich<br />

muss der Host die Komponenten in der<br />

richtigen Reihenfolge instanzieren, im Abhängigkeitsbaum<br />

von unten nach oben,<br />

von den Blattknoten zur Wurzel. Anschließend<br />

übergibt er die Kontrolle an das Portal.<br />

Für die vorliegende Anwendung, bestehend<br />

aus einer Handvoll Komponenten, ist<br />

diese Aufgabe trivial. Bei größeren Anwendungen<br />

kostet diese Handarbeit Zeit und<br />

sollte automatisiert werden. Die Grund-<br />

www.dotnetpro.de dotnetpro.dojos.2011<br />

LÖSUNG<br />

idee dabei ist: Man überlässt das Instanzieren<br />

der Komponenten einem DI-Container<br />

wie StructureMap [2] oder Castle Windsor<br />

[3]. Über ein eigenes Interface identifiziert<br />

man den Startpunkt der Anwendung, und<br />

los geht’s. Ein solcher Host kann dann sogar<br />

generisch sein und in allen Anwendungen<br />

verwendet werden.<br />

Denkbare Erweiterungen<br />

Für wiederkehrende Aufgaben wäre es<br />

sinnvoll, das Schema der Datengenerierung<br />

speichern und laden zu können. Dies<br />

kann beispielsweise mit dem Lounge Repository<br />

[4] erfolgen. In der Architektur<br />

würde dafür ein weiterer Adapter ergänzt,<br />

mit dem ein Schema gespeichert und geladen<br />

werden kann. Natürlich müssten im<br />

Portal entsprechende Anpassungen vorgenommen<br />

werden, um entsprechende Menüfunktionen<br />

zu ergänzen.<br />

Des Weiteren wäre es denkbar, die Generatoren<br />

zur Laufzeit dynamisch zu laden.<br />

Damit könnten Entwickler ihre eigenen<br />

Generatoren implementieren und verwenden,<br />

ohne dazu die gesamte Anwendung<br />

übersetzen zu müssen. Mithilfe eines DI-<br />

Containers wie StructureMap oder des<br />

Managed Extensibility Framework MEF [5]<br />

sollte auch diese Erweiterung keine große<br />

Hürde darstellen.<br />

Fazit<br />

Bei dieser Aufgabe stellte sich heraus, dass<br />

die Benutzerschnittstelle einer Anwendung<br />

durchaus einige Zeit in Anspruch<br />

nehmen kann. Die eigentliche Funktionalität<br />

war dagegen schnell entworfen und implementiert.<br />

Das lag maßgeblich daran,<br />

dass ich mir im Vorfeld einige Gedanken<br />

über die Architektur gemacht hatte. Danach<br />

ging die testgetriebene Entwicklung<br />

flüssig von der Hand. [ml]<br />

[1] Stefan Lieser, Meier, Müller, Schulze…,<br />

Testdaten automatisch generieren,<br />

dotnetpro 5/2010, Seite 108ff.,<br />

www.dotnetpro.de/A1005dojo<br />

[2] http://structuremap.sourceforge.net/<br />

[3] http://www.castleproject.org/container/<br />

[4] http://loungerepo.codeplex.com/ und Ralf<br />

Westphal, Verflixte Sucht, dotnetpro 11/2009,<br />

Seite 52f. www.dotnetpro.de/A0911Sandbox<br />

[5] http://mef.codeplex.com/<br />

Wir liefern passgenaue<br />

Strategien und Lösungen<br />

für Ihre Inhalte auf<br />

iPhone/iPad<br />

Android<br />

BlackBerry<br />

Windows Phone 7<br />

dem mobilen<br />

Browser<br />

Besuchen Sie<br />

uns unter<br />

www.digitalmobil.com

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!