Wählen Sie dynamisch aus, welche Objekte mit einem abstrakten Fabrikmuster von XML erstellt werden sollen

StackOverflow https://stackoverflow.com//questions/9703571

Frage

Ich hoffe, das ist nicht zu spezifisch.

Ich habe ein XML-Schema erstellt, das ich mit XJC kompiliere, um den Klassen zu erhalten. Der XML stellt grundsätzlich einige Elemente eines Formulars dar (wie Textfeld, Etiketten usw.). Hier ist ein Auszug:

generasacodicetagpre.

Wie Sie sehen, ist der Typ des Objekts aus dem Attribut XSI definiert: TYPE, wenn ich den XML mit JAXb nicht ordnen, wenn ich mit JAXB nicht den richtigen Klassen instatiere.

Jetzt die Frage: Ich setze eine abstrakte Fabrik um, um die Objekte zu erstellen, also muss ich also eine andere Methode meiner Fabrik aufrufen, je nachdem, welches Objekt der XML sagt, dass ich erstellen muss. Die nicht ziemlich zufriedenstellende Methode, die ich jetzt verwende, ist das:

generasacodicetagpre.

Ich möchte eine andere Methode verwenden (Bearbeiten: anstelle des Schalters / der Hülle), und ich dachte an ENULS, aber ich bin nicht ganz da.Ich möchte auch keine Reflexion verwenden.

War es hilfreich?

Lösung

Nun, für mich ist dies kein wirklich ein Fabrikmuster. Ein Fabrikmuster ist in der Regel mit dem Strategy Muster . Mein Vorschlag wäre also, Ihre Fabrik umzusetzen, damit er einfach f.CreateObject ruft, wodurch ein Objekt zurückgibt, das eine generische Erstellung () anrufen kann. Das Schöne dagegen ist, dass es Ihren Methoden und Klassen erlaubt, sich auf ihre speziellen Konzentration auf ihre jeweils Verantwortung zu konzentrieren Jederzeit, wenn Sie die Funktionalität für einen Artikel ändern müssen, müssen Sie andere nicht neu erstellen (Sie können eine Basisklasse ausarbeiten, wenn Sie gemeinsame Funktionalität haben, die sich für alle ändern muss). Lassen Sie mich wissen, wenn Sie weitere Informationen zu unten oder der Begründung benötigen. Sie können wahrscheinlich sogar die Hauptmethode mehr von Ihrer Fabrik und eher den Code noch mehr machen.

generasacodicetagpre.

ps. Ich komme aus einem C # -Hintergrund, also wenn einige der Syntax ausgeschaltet sind, lass es mich wissen. Das Grundprinzip gilt jedoch immer noch

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top