Hallo,
ich schreibe derzeit eine Anwendung, der eine ziemlich komplexe Datenstruktur - bestehend aus etwa 40 Klassen - zugrunde liegt. Die Daten werden über eine XML-Datei eingelesen. Daraus wird dann die interne Objektstruktur erzeugt.
Zur Erzeugung der internen Datenstruktur möchte ich das Erzeuger Muster einsetzen. Die Planung sieht folgendermaßen aus. Ein IOManager kümmert sich um den Ablauf des Ladens bzw. Speicherns der Dateien. Zunächst holt er sich per FileDialog (SWT Pendant zum JFileChooser) die Datei. Er delegiert das Laden der XML-Datei an ein Director-Object, welches die XML-Datei einliest (per JDOM) und dann die build() Aufrufe an den Builder schickt. Am Ende holt sich der IOManager das "Endprodukt" beim Builder ab.
So weit so gut. Ich habe mir nun aber überlegt, dass ich aufgrund der Größe meiner Datenstruktur nicht nur einen sondern zwei Builder schreiben will, da sich die Datenstruktur auch inhaltlich gut in zwei verschiedene Teile gliedern lässt. Weiterhin war die Idee, die Konstruktoren der einzelnen Klassen dann package-private zu machen, um sicherzustellen, dass nur die Builder sich um die Objektinstanzierung kümmern. Nun habe ich aber die Klassen der Datenstruktur in verschiedene Packages aufgeteilt. Ich müsste für package-private Konstruktoren aber alle relevanten Klassen im selben Package haben, wie der relevante Builder.
Nun habe ich also zwei Möglichkeiten. Entweder ich schmeisse alle Klassen zusammen mit dem Builder in ein Package. Dann habe ich aber wieder ein Problem, denn es gibt Klassen, die sowohl von Builder1 als auch von Builder2 instanziert werden müssen. Also müsste ich im Endeffekt alles in ein Package schmeissen. Dann könnte ich die Konstruktoren package-private machen, hätte aber ein riesiges unübersichtliches Package. Oder ich lasse es wie es ist und die Konstruktoren bleiben public.
Wie würdet Ihr das handhaben?
MFG byto
Edit: Ich meinte natürlich package-private, nicht protected...
ich schreibe derzeit eine Anwendung, der eine ziemlich komplexe Datenstruktur - bestehend aus etwa 40 Klassen - zugrunde liegt. Die Daten werden über eine XML-Datei eingelesen. Daraus wird dann die interne Objektstruktur erzeugt.
Zur Erzeugung der internen Datenstruktur möchte ich das Erzeuger Muster einsetzen. Die Planung sieht folgendermaßen aus. Ein IOManager kümmert sich um den Ablauf des Ladens bzw. Speicherns der Dateien. Zunächst holt er sich per FileDialog (SWT Pendant zum JFileChooser) die Datei. Er delegiert das Laden der XML-Datei an ein Director-Object, welches die XML-Datei einliest (per JDOM) und dann die build() Aufrufe an den Builder schickt. Am Ende holt sich der IOManager das "Endprodukt" beim Builder ab.
So weit so gut. Ich habe mir nun aber überlegt, dass ich aufgrund der Größe meiner Datenstruktur nicht nur einen sondern zwei Builder schreiben will, da sich die Datenstruktur auch inhaltlich gut in zwei verschiedene Teile gliedern lässt. Weiterhin war die Idee, die Konstruktoren der einzelnen Klassen dann package-private zu machen, um sicherzustellen, dass nur die Builder sich um die Objektinstanzierung kümmern. Nun habe ich aber die Klassen der Datenstruktur in verschiedene Packages aufgeteilt. Ich müsste für package-private Konstruktoren aber alle relevanten Klassen im selben Package haben, wie der relevante Builder.
Nun habe ich also zwei Möglichkeiten. Entweder ich schmeisse alle Klassen zusammen mit dem Builder in ein Package. Dann habe ich aber wieder ein Problem, denn es gibt Klassen, die sowohl von Builder1 als auch von Builder2 instanziert werden müssen. Also müsste ich im Endeffekt alles in ein Package schmeissen. Dann könnte ich die Konstruktoren package-private machen, hätte aber ein riesiges unübersichtliches Package. Oder ich lasse es wie es ist und die Konstruktoren bleiben public.
Wie würdet Ihr das handhaben?
MFG byto
Edit: Ich meinte natürlich package-private, nicht protected...