ich habe hier meinen KonfigurationsManager der eine Konfiguration hat die aus verschiedenen Objekten besteht. Zu jedem Objekt möchte ich einen Befehl in einer Befehlsliste speichern. Um zu wissen welche Befehle für ein Object verfügbar sind kann man diese fragen mit funktioniertMit()
(KlassenMethode). Außerdem habe ich den Constructor privat gemacht und ich kann mir nur ein Exemplar mittels generiereBefehlFuer()
(auch eine Klassenmethode) holen. Dieser fertige Befehl wandert wieder in meine Konfiguration und kann dem BefehlsAusführer gegeben werden, der im Prinzip nur die ausführen Methode aufruft (sollte in etwa dem Command Pattern entsprechen). Zu sehen im ersten Bild Befehle.jpeg (das kursive ist hier eine abstracte Klasse, keine Ahnung ob das eine übliche Konvention ist).
Jetzt zur ersten Herausforderung:
Ich wüsste nicht, dass ich mir eine Liste von Klassen in meinem Konfigurationsmanager halten kann, um die meinem Nutzer zur Auswahl zu stellen.
Ansatz 1:
Eine Art Wrapper um den Befehl, den ich kreieren kann und der die Klassenmethoden funktioniertMit() und generiere...() für den entsprechenden Befehl abbildet. Ich habe hier noch Delphi 5 und hab deshalb keine Generics, sonst könnte ich mir einen TBefehlWrapper<T> bauen. So muss ich, denke ich zumindest, jedes mal einen neuen Wrapper zu einem neuen Befehl schreiben (siehe 2. Bild).
Ansatz 2:
Ich hole mir ungültige Exemplare von jedem Befehl, die Exceptions werfen, wenn ich sie ausführen will. Das wollte ich ursprünglich gar nicht zulassen.
Die zweite Herausforderung:
Wie könnte ich am besten die entstandene Konfiguration (das Mapping Object <-> Befehl) abspeichern? Es geht mir hier nicht darum wo ich das hinspeichere, sondern wie ich z.B. die Befehle identifiziere um sie beim Laden wieder herstellen zu können. Ich denke darauf trifft man häufiger, z.B. wenn man eine Strategie austauschbar halten möchte und diese durch den Nutzer konfigurierbar sein soll.
Ich bin für jegliche Meinungen/Kritiken/Vorschläge zu meinem Entwurf dankbar.