Einzelnen Beitrag anzeigen

Furtbichler
(Gast)

n/a Beiträge
 
#5

AW: DLL um Schnittstellenparameter zu sparen

  Alt 17. Okt 2013, 18:47
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;
...

Geändert von Furtbichler (17. Okt 2013 um 18:54 Uhr)
  Mit Zitat antworten Zitat