Einzelnen Beitrag anzeigen

Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#12

Re: Klassen-Konstruktion einmal anders...

  Alt 31. Aug 2004, 17:05
Vorstellen könnte ich mir, das du die wichtigsten konstruktoren überdeckst und nur einen key (anstatt der message) übergibst und dann die exception-klasse sich die message holt und an die vorfahren weitergibt:

Delphi-Quellcode:
type
  TLokiExceptionClass = class of TLokiException ;

  TLokiException = class(Exception)
  protected
    class function ResolveMsg(const aKey:string):string;
  public
    constructor Create(const key: string); reintroduce;
    constructor CreateFmt(const key: string; const Args: array of const); reintroduce;
  end;

...

{ TLokiException }

constructor TLokiException.Create(const key: string);
begin
  inherited Create(ResolveMsg(key));
end;

constructor TLokiException.CreateFmt(const key: string;
  const Args: array of const);
begin
  inherited CreateFmt(ResolveMsg(key),Args);
end;

class function TLokiException.ResolveMsg(const aKey: string): string;
begin
  result := GetMsgFromAnywhere(aKey); // musst du selbst implementieren
end;
Metaklassen brauchst du dann eigentlich nicht, obwohl man das vielleicht auch nutzen kann. mal sehn, aber erstmal das hier. Ein aufruf könnte dann so aussehen:

Delphi-Quellcode:
...
raise EIrgendWasIstFaul.create('<IWIF>');
damit würdest du vermeiden, dass du explizite texte angeben musst, sondern nur einen key. So du kannst jetzt nutürlich noch vereinfachungen mit metaklassen machen. zB.:

Delphi-Quellcode:
...
// anstatt direkt zu 'raisen' eine procedure beauftragen:
RaiseMyError('<IWIF>');
...
procdure RaiseMyError(const aKey:string);
var EClass:TLokiExceptionClass;
begin

  EClass:=TLokiExceptionClass( ? list.indexOfObject(aKey).Object.wasWeissIch ? );

  if ECLass <> nil then
    raise EClass.create(aKey)
  else
   raise Exception('Unknown exception :'+aKey);
end;
Macht das sinn? Müsste man vielleicht nochmal überdenken. Letztendlich muss es dir genehm sein Will dir ja nix aufdrängen.
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat