Wozu gibt es eigentlich Datenmodule? Die sind ja nicht nur dazu da, um Queries etc. vorzuhalten, sondern in dem Programmierparadigma 'Datenmodul' sind es eben die Container, die einen davon abhalten sollen, die ganzen Datenmengen ständig hin und her zu schieben. Früher war das mal eine Performancebremse, heute mindestens eine Spaßbremse.
Gut, das Paradigma ist ca. 40 Jahre alt, aber Delphi ist ja nun mal per se 'old school' (was jetzt nicht negativ zu bewerten sein soll, sondern eher als 'altbewährt' zu verstehen ist).
Also: Ein Datenmodul als allgemeinen Datencontainer instantiieren und als eine Eigenschaft dieses Containers eben deine Klasse mit den Daten.
Wenn später noch mehr dazukommen soll, hat man nun schon einen Container, und das Ganze ist aufgeräumt.
Alternativ kannst Du dir auch eine Klasse bauen, die die fertigen Daten kapselt. Bei Bedarf instantiierst Du dir eine Instanz, die dir dann den Zugriff auf diese Daten ermöglicht. Natürlich ist im Hintergrund eine statische Instanz deiner eigentlichen Datenklasse am werkeln, aber nach außen hin eben nicht. Und deshalb ist das auch weder ein Singleton noch eine globale Variable, also auch nicht für
OOP-Modernisten 'böse'.
Delphi-Quellcode:
Type
TMyDataAccess =
class
private class var Data : TMyData;
public
Class Procedure Initialize;
Function GiveMeData() : TAnyData;
End;
Implementation
class Procedure TMyDataAccess.Initialize;
Begin
Data := TMyData.Create;
Data.TakeLongCalculationTime();
End;
Function TMyDataAccess.GiveMeData : TAnyData;
Begin
Result := Data.GiveMeData;
End;
...
// Beim Programmstart (oder im initialization-Abschnitt der Unit)
TMyDataAccess.Initialize;
...
// Verwendung
... dataAccess := TMyDataAccess.Create;
Try
DoSomethingWith(dataAccess.GiveMeData);
finally
dataAccess.Free;
// Oder für die Hasenfüße: FreeAndNil (dataAccess);
End;
...