Einzelnen Beitrag anzeigen

hschmid67

Registriert seit: 2. Jul 2012
Ort: Weilheim i. Obb.
62 Beiträge
 
Delphi 10.4 Sydney
 
#1

Fluent Design und Records

  Alt 23. Aug 2019, 05:31
Liebe Delphi-Gemeinde,

ich mag im Design meiner Objekte das Pattern des Fluent Design sehr gerne und gestalte meine Methoden deshalb gerne damit. Ich meine damit also etwa ein solches Gebilde:

Result := CreateSomeInterface.DoSomething('withParameter').DoSomethingOther.ConvertEverythingToString;

Das ist an manchen Stellen sehr praktisch und macht den Code in meinen Augen etwas schöner, vor allem, wenn man mit Interfaces statt mit Objekten arbeitet.

Nun frage ich mich, ob man das auch mit Records machen kann, bzw. ob das sinnvoll ist.

Angenommen ich habe folgendes:

Delphi-Quellcode:
type
  Tfluent = record
    variable: string;
    function DoSomething(const mParameter: string): Tfluent;
  end;

function Tfluent.DoSomething(const mParameter: string): Tfluent;
begin
  variable := variable + mParameter;
  Result := Self;
end;
Soweit ich das verstehe, würde das Result := Self; bei Records immer dazu führen, dass der komplette Record kopiert wird, da eine Übergabe bei Records ja "als Wert" und nicht "als Zeiger" funktioniert.

Damit wäre das Fluent Design bei Records nicht sinnvoll und würde ständig eine Kopiererei der Daten verursachen. Ist das so, oder gibt es einen Trick? Wie macht ihr das?

Ich fände die Records deshalb sehr schön, weil man z.B. mit Operator Overloading sich dann eine Methode "ConvertEverthingToString" sparen könnte, was meines Wissens mit Objekten/Interfaces bislang noch nicht geht.

Viele Grüße
Harald
Harald Schmid
  Mit Zitat antworten Zitat