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)