Als Interfaces:
Delphi-Quellcode:
TMyObj = class(TInterfacedObject, MyInterface)
Field_A: IGrpA;
Field_B: IGrpB;
Field_C: IGrpC;
Field_D: IGrpD;
Field_E: IGrpE;
Field_F: IGrpF;
Um der Dependency Injection gerecht zu werden, würde der constructor also so aussehen:
constructor TMyObj.create(aGrpA: IGrpA; aGrpB: IGrpB; aGrpC: IGrpC; aGrpD: IGrpD; aGrpE: IGrpE; aGrpF: IGrpF);
Unnötig zu sagen, das grenzt wieder an Unübersichtlichkeit und überschreitet eine vernünftige Anzahl an Parametern.
Delphi-Quellcode:
type
TMyObjData = record
GrpA: IGrpA;
GrpB: IGrpB;
GrpC: IGrpC;
GrpD: IGrpD;
GrpE: IGrpE;
GrpF: IGrpF;
end;
//...
constructor TMyObj.Create(const AMyObjData: TMyObjData);
begin
Self.FMyData := AMyObjData;
// Tataa, fertig! Super erweiterbar, man muss die Methodensignatur des Constructors nicht mehr anpacken!
end;
Jetzt kannst du dir noch aussuchen, ob du deine öffentlichen Properties auf das gesamte Sammel-Record zeigen lässt oder auf die einzelnen Bestandteile davon.