Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: [XE5]: Nutzung des Datenmoduls

  Alt 27. Jan 2014, 23:32
Als globalen Speicher immer ein Singleton (Klasse oder Interface) benutzen.

Warum:
  • Zugriff kann threadsicher gemacht werden
  • Auf Änderungen kann reagiert werden (im Setter)
  • Abhängigkeiten zwischen den Variablen können automatisiert werden
  • Speichern und Laden kann direkt in die Klasse integriert werden
  • ...

Hört sich kompliziert an, ist es aber nicht.
Delphi-Quellcode:
unit GlobalStore;

interface

type
  Global = class
  private
    class var FUserID : Integer;
    class var FUserRoleID : Integer;
    class var FUsername : string;
    class procedure SetUserID( const Value : Integer );
    class procedure SetUsername( const Value : string ); static;
    class procedure SetUserRoleID( const Value : Integer ); static;
  public
    class property UserID : Integer read FUserID write SetUserID;
    class property UserRoleID : Integer read FUserRoleID write SetUserRoleID;
    class property Username : string read FUsername write SetUsername;
  end;

implementation

{ Global }

procedure Global.SetUserID( const Value : Integer );
begin
  FUserID := Value;
end;

class procedure Global.SetUsername( const Value : string );
begin
  FUsername := Value;
end;

class procedure Global.SetUserRoleID( const Value : Integer );
begin
  FUserRoleID := Value;
end;

end.
über ein Interface
Delphi-Quellcode:
unit GlobalStore;

interface

type
  IGlobal = interface
    ['{F0A0B4C5-44CF-401A-983E-B68CF010A0AD}']
    function GetUserID : Integer;
    procedure SetUserID( const Value : Integer );
    property UserID : Integer read GetUserID write SetUserID;
    function GetUserRoleID : Integer;
    procedure SetUserRoleID( const Value : Integer );
    property UserRoleID : Integer read GetUserRoleID write SetUserRoleID;
    function GetUsername : string;
    procedure SetUsername( const Value : string );
    property Username : string read GetUsername write SetUsername;
  end;

function Global : IGlobal;

implementation

type
  TGlobal = class( TInterfacedObject, IGlobal )
  private
    class var _Default : IGlobal;
  private
    FUserID : Integer;
    FUserRoleID : Integer;
    FUsername : string;
  public
    class function Default : IGlobal;
    function GetUserID : Integer;
    function GetUserRoleID : Integer;
    function GetUsername : string;
    procedure SetUserID( const Value : Integer );
    procedure SetUserRoleID( const Value : Integer );
    procedure SetUsername( const Value : string );
  end;

function Global : IGlobal;
begin
  Result := TGlobal.Default;
end;

{ TGlobal }

class function TGlobal.Default : IGlobal;
begin
  if not Assigned( _Default ) then
    _Default := TGlobal.Create;
  Result := _Default;
end;

function TGlobal.GetUserID : Integer;
begin
  Result := FUserID;
end;

function TGlobal.GetUsername : string;
begin
  Result := FUsername;
end;

function TGlobal.GetUserRoleID : Integer;
begin
  Result := FUserRoleID;
end;

procedure TGlobal.SetUserID( const Value : Integer );
begin
  FUserID := Value;
end;

procedure TGlobal.SetUsername( const Value : string );
begin
  FUsername := Value;
end;

procedure TGlobal.SetUserRoleID( const Value : Integer );
begin
  FUserRoleID := Value;
end;

end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat