Ganz simpel und einfach
Delphi-Quellcode:
unit Layer_App;
interface
type
IAppLayer =
interface
[
{GUID}]
// Zugriff auf Pfade, die die Anwendung benutzt
function Paths : TAppPaths;
// Der aktuelle User
function User : TUser;
// Die Datenzugriffsschicht/-en
function Data : TDataLayer;
end;
function AppLayer : IAppLayer;
implementation
type
TAppLayer =
class( TInterfacedObject, IAppLayer )
public
function Paths : TAppPaths;
function User : TUser;
function Data : TDataLayer;
end;
var
_AppLayer : IAppLayer;
function AppLayer : IAppLayer;
begin
if not Assigned( _AppLayer )
then
_AppLayer := TAppLayer.Create;
Result := _AppLayer;
end;
end.
Jetzt nur noch überall die
Unit einbinden und fröhlich mit dem AppLayer arbeiten.
Genauso denkbar ist natürlich auch dieses hier
Delphi-Quellcode:
unit Layer_App;
interface
type
AppLayer =
class
public
// Zugriff auf Pfade, die die Anwendung benutzt
class function Paths : TAppPaths;
// Der aktuelle User
class function User : TUser;
// Die Datenzugriffsschicht/-en
class function Data : TDataLayer;
end;
implementation
// jo hier noch implementieren
end.
Der Zugriff ist bei beiden Varianten absolut gleich
AppLayer.User.*
.
Ist dann also Geschmacksache mit der Ausnahme, dass bei generischen Methoden, die Interfaces nicht mitspielen.
Delphi-Quellcode:
IFoo = interface
procedure DoWith<T>( Value : T ); // geht nicht
end;
TFoo = class
public
class procedure DoWith<T>( Value : T ); // geht
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)