Hi@all,
ich komme am besten gleich zum Punkt.
Ich bin Grad dabei ein Programm zu schreiben, dem ich Daten als String übergeben kann. Das Programm soll dann aus diesen Daten ein Objekt erstellen, welches diese Daten enthält. Die Daten sollen sowohl im XML als auch im JSON-format vorliegen können (evtl. Kommen später noch andere Formate hinzu).
Nun soll mein Programm folgendes tun:
Sowohl das Ermitteln des Daten-Formates als auch das erstellen des Objektes anhand der Daten sollten kein Problem darstellen. Mir geht es hauptsächlich um die Frage, wie ich das Programm am besten aufbaue, um es erweiterbar zu halten, so dass ich später einfach das umwandeln neuer Dateiformate hinzufügen kann oder dass das Programm anstelle von Strings auch Dateien entgegennehmen kann, etc.
Gibt es da ein Design-pattern oder eine Kombination aus verschiedenen Patterns die auf diese Problemstellung zugeschnitten sind?
Wie würdet ihr da am besten vorgehen?
Versteife Dich nicht auf die Wiederverwendung und Erweiterbarkeit.
Du wirst sowieso nie alles komplett abdecken können; Du wirst nie wissen, was kommen wird.
Die wichtigsten Dinge wie Dependency Injection, Inversion of Control bzw Gang of four ... decken ohnehin wichtige Dinge von Haus aus ab.
Aber fokussiere Dich auf das Kernthema; nicht auf Dinge, die evtl. nie kommen werden.
Es wird immer zig Pattern für eine Lösung geben.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
@Abt: Ich sehe das etwas anders, die Grundstruktur des Programmes sollte schon so geschrieben sein, daß man nicht für jedes neue Format an X Stellen im Code Änderungen machen muß.
Da bieten sich das Abstrakte Fabrik- und Strategie-Pattern an.
Dem hab ich auch nicht widersprochen.
Aber es gibt kein Design und eine Architektur, die für alle Future Features eine Modularisierung anbietet.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
OK, schonmal danke für eure Antworten.
@Th69 wenn ich das soweit alles richtig verstanden habe, dann würde die Factory die Daten entgegen nehmen (als String, als Datei, als Stream oder was auch immer), ermitteln um welches Format (XML, JSON, etc.) es sich handelt und dann anhand dessen das jeweilige Objekt aus dem Strategy-pattern erstellen und diesem dann die Daten übergeben. Dieses erstellte Objekt, würde dann anhand der Daten - welche ihm von der Factory übergeben wurden - mein gewünschtes Objekt erstellen, welches diese Daten enthält. Wäre das in diesem Fall die richtige Vorgehensweise?
Wenn nicht, wäre ich über eine Richtigstellung sehr dankbar.
Wenn ja, dann hätte ich noch die Frage, ob es einen bestimmten Grund dafür gibt, warum man die Abstract Factory nutzen sollte oder ob auch eine Factory Method möglich wäre.
Ja, so meinte ich das (und wie unter Fabrikmethode bei "Verwandte Entwurfsmuster" steht, wird die "Abstrakte Fabrik" meist als Fabrikmethode(n) realisiert - es ist also nur eine Variation davon, d.h. du kannst es dir also je nach Anwendungsfall [ob du nur eine oder mehrere verschiedene zu erzeugende Objekte hast] aussuchen).