Hallo,
ich sitze gerade an einer Klassenbibliothek für einen Reportgenerator. Ich habe eine 'Oberklasse', die als Controller fungiert (globale Einstellungen, Nachschlagelisten etc.). Jede Klasse meiner Bibliothek hat einen Verweis auf diese Oberklasse, ungefähr so:
Delphi-Quellcode:
Type
TMasterClass = Class;
TSomeItem = Class
fMaster : TMasterClass;
End;
TAnotherItem (TSomeItem)
End;
TSomeItemList = Class (TList)
...
End;
TAnotherItemList = Class (TList)
...
End;
...
TMasterClass = Class
Private
fSomeItemList : TSomeItemList;
fAnotherItemList : TAnotherItemList;
Public
Property SomeItemList : TSomeItemList Read fSomeItemList;
Property AnotherItemList : TAnotherItemList Read fAnotherItemList;
End;
Nun wird die
Unit langsam ziemlich lang und mir fällt keine Methode ein, wie ich das entwirren kann, denn die Basisklasse 'TSomeItem', von der alle anderen Klassen abgeleitet werden, enthält ja einen Verweis auf die Masterklasse, die in der logischen Struktur ganz oben/unten ist.
Ich hatte in einem früheren Verweis einen abstrakten Vorfahren der 'TMasterClass' in einer eigenen
Unit deklariert und so die zyklischen Abhängigkeiten entwirrt, nur dann musste ich bei jeden Zugriff auf die Instanz der Masterklasse auf die konkrete Klasse casten, was programmiertipptechnisch blöd und
imho kein gutes
OOP-Design ist.
Also: Gibt es ein Pattern, ein paar Grundregeln, wie ich diese Geschichte elegant aufdröseln kann? Wie kann ich die einzelnen Nachfahren der 'TSomeItem' in eigene Units packen. Geht das überhaupt? Wenn ich mir die
Unit '
DB' anschaue, meine ich fast, das das nicht so einfach ist...