Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: Implementation Interface Struktur

  Alt 4. Dez 2009, 11:33
Ich könnte mir das etwa so vorstellen:
Delphi-Quellcode:
type
  IExport = interface
    procedure Export({...});
    function GetParams: TStringList;
    procedure SetParams(AValue: TStringList);
    property Params: TStringList read GetParams write SetParams;
  end;
Implementation:
Delphi-Quellcode:
procedure CreateExport: IExport; export;

implementation

type
  TExportCSV = class(TInterfacedObject, IExport)
  protected
    FParams: TStringList;
    procedure InitParams; virtual;
    procedure CheckParams; virtual;
  public {IExport}
    procedure Export({...});
    function GetParams: TStringList;
    procedure SetParams(AValue: TStringList);
  public
    constructor Create;
    destructor Destroy; override;
  end;

constructor TExportCSV.Create;
begin
  inherited;
  FParams := TStringList.Create;
  InitParams;
end;

destructor TExportCSV.Destroy;
begin
  FParams.Free;
  inherited;
end;

procedure TExportCSV.InitParams;
begin
  {alle möglichen Parameter mit default eintragen}
  with FParams do
  begin
    Add('ExportDir' + NameValueSeparator);
    Add('Separator' + NameValueSeparator + ';');
    {...}
  end;
end;

procedure TExportCSV.CheckParams;
begin
  if FParams.Values['ExportDir'] = 'then
    raise Exception.Create('Parameter ''ExportDir'' ist erforderlich.');
  if FParams.Values['Separator'] = 'then
    raise Exception.Create('Parameter ''Separator'' ist erforderlich.');
  if Length(FParams.Values['Separator']) > 1 then
    raise Exception.Create('Parameter ''Separator'' darf nur ein Zeichen enthalten.');
  {...}
end;

procedure TExportCSV.SetParams(AValue: TStringList);
begin
  FParams.Assign(AValue);
end;

function TExportCSV.GetParams: TStringList;
begin
  Result := FParams;
end;

procedure TExportCSV.Export({...});
begin
  CheckParams;
  {...}
end;

procedure CreateExport: IExport;
begin
  Result := TExportCSV.Create;
end;
Ohne das die Anwendung die Parameter der konkreten Schnittstelle kennen muss, können die Parameter so vom Anwender bearbeitet, gespeichert und gelesen werden. TStringList ist natürlich nur die einfachste Variante. Denkbar wäre eine Liste von Parameterobjekten die jeweils noch weitere Information über die Art des Paramaters besitzen und diesen validieren können.
  Mit Zitat antworten Zitat