004
30.05.2007, 11:23 Uhr
virtual
Sexiest Bit alive (Operator)
|
Ein Ansatz wäre ein IoC Container (Inversion of Control). Leider hast Du in C++ nicht sowas schönes wie Reflection aus java, aber man könnte sich durchaus eine generisches framework auch in C++ vorstellen.
Die Prinzipielle Idee könnte man wie folgt skizzieren (ist nicht komplett durchdacht):
C++: |
class daten_behaelter { };
class basis_baustein {
private: std::map<std::string,daten_behaelter> properties;
virtual void set_property(const std::string& key, const daten_behaelter& value);
virtual const daten_behaelter& get_property(const std::string& key) const;
virtual daten_behaelter perform() = 0; };
|
Unter einem "daten_behaelter" verstehe ich eine Klasse, die beliebige Daten aufnehmen kann, im Einfachsten Fall wohl ein String, aber eben auch strukturierte Daten wie zB eine XML node oder was auch immer. Verschiedene Frameworks liefern hier eine variant klasse, die man geeignet erweitern kann.
Ein "basis_baustein" ist ein "Ding", welches über eine Liste von Properties verfügt und mittels "perform" zu einer aktion angestossen werden kann.
Dazu braucht man nun noch eine Baustein Fabrik (FactoryPattern). Eine bausteinfabrik kennt die verschiedenen baustein Implementierungen (hier gibt es verschiedene Möglichkeiten von einem statischen Mapping bis hin zu einem ausgefeilten Pluginkonzept). Die Factory hat die Aufgabe, einen Baustein zu erzeugen und zu konfigurieren.
z.B. Bei
Code: |
<baustein type="substr" from="userinput" start="0" length="7" var="tmp"/>
|
Schaut die factory nach, wie die bausteinKlasse vom type "substr" lautet. Von dieser ruft sie einen Defaultconstructor auf und setzt nach einander die Properties "from", "start", und "var".
Da du das ganze als Workkflow gestalten willst, wirst Du vermutlich der Klasse daten_behaelter beibringen müssen, daß sie neben Strings auch referenzen auf baustein Instanzen aufnehmen kann, so daß bausteine selbst auch wieder properties anderer Bausteine sein können (dies ist zB notwendig im If-Baustein um den Conditional-Block zu modellieren oder eben für den gesamten Workflow, welcher ja letztlich einfach eine baustein_sequence ist.
So in etwa wäre jedenfalls vermutlich meine Herangehensweise, wenngleich es auch weniger flexible, dafür aber leichter implementierbare Alternativen geben mag. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |