Thema: Delphi Interfaces

Einzelnen Beitrag anzeigen

Benutzerbild von maximov
maximov

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

Re: Interfaces

  Alt 3. Nov 2005, 11:38
Zitat von tigerman33:
...

@maximov:
Das hört sich sehr interessant an, muss ich mir mal genauer anschauen (hab gleich aber einen Termin => später). Aber zunächst muss ich mal devil's advocate spielen und fragen: Anstatt der Methode Interfaces zu übergeben hätte man aber doch genauso gut auch Objekte übergeben können. Also wo ist der Unterschied? Anders ausgedrückt: Angenommen, ich würde versuchen, in deinem Beispiel sämtliche Interfaces durch Objekte zu ersetzen. Wo würde es haken?
Was du als "sämtliche Interfaces" interfaces titulierst ist grad mal ein einziges kleines interface, welches innerhalb von 10 minuten deklariert ist. Und der unterschied besteht darin, das hier die systeme tatsächlich nur das tun was in ihrem verantwortungsbereich liegt. In diesem fall soll der template prozessor nur das template durchgehen und die werte einfügen, die er von extern erfragen muss, da er nur ein verarbeiter ist. Das ist sehr nützlich, da ich den variablen-container auch für das verarbeiten anderer templates recyclen kann, wenn ich das template selbst mit objekten gefüttert hätte, dann hätte ich keine zentrale instanz wo ich die werte ändern oder ergänzen kann.

Es ist sogar so, das der template-prozessor nichtmal wissen muss wie man einen text auseinander nimmt, da er ja nur nach schema-F -> zur nächsten variable geht -> namen der variable holen -> wert von strategie holen -> wert in das resultat einfügen -> und das so lange bis EOF tun muss! Für das tatsächliche verarbeiten der textdaten könnte man einen text-prozessor einsetzen, sodass folgendes ausreichend ist um ein hoch kompliziertes template zu füllen:
Delphi-Quellcode:
TextProcessor := CreateTextProcessor(Text);

   // process the template
   //
   while TextProcessor.ForwardToNextVariable do
      TextProcessor.InsertValue(
         VariableStrategy.GetVariableValue(
           TextProcessor.GetCurrentVariable));

   Result := TextProcessor.GetResult;
durch die einfachheit, klarheit und aufgabentrennung lassen sich unglaublich viele fehler quellen vermeiden, was dann end-viel zeit spart. Der textprocessor ist dann folgendermassen deklariert und wie er implementiert ist spielt ja eigentlich keine rolle:
Delphi-Quellcode:
ITextProcessor = interface
   ['{D7845C11-D65B-4780-9874-B9A1E4F656BA}']
      function ForwardToNextVariable:boolean;
      function GetCurrentVariable:String;
      procedure InsertValue(const value:string);
      function GetResult:string;
   end;
Klar kommt man mit einem schnellschuss evtl. schneller zu einem ergebnis, aber ob das auch derart wiederverwendbar und dynamsich ist - ist fraglich Hoffe das reicht als erklärung des unterschieds....zumindest sehe ich das so. ISt natürlich nicht in stein gemeisselt, denn das ist sicher noch eleganter und abgefahrener zu lösen.
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat