Einzelnen Beitrag anzeigen

Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#1

Objekt in Komponente variabel gestalten

  Alt 30. Jun 2017, 14:01
Liebe Delphi-Gemeinde,
ich habe leider keinen besseren Titel für mein Problem gefunden, Sorry. Gegeben sei eine selbst entwickelte Komponente, nennen wir sie TMyComponent. Diese beinhaltet eine abgeleitete TObjectList mit neuen eigenen Methoden. Es handelt sich bei meiner Komponente um eine TCP-Server Komponente, die FClientList soll eine Liste mit allen registrierten Clienten sein. Der Verwendungszweck spielt für mein Problem allerdings keine Rolle

Delphi-Quellcode:
TMyComponent = class
 private
  FClientList : TClientList
[...]
Nun möchte ich die FClientList variabel gestalten, d.h. ich habe verschiedene "TClientLIsten", z.B. speichert die eine die Daten in einer Datenbank, die andere in einem proprietären Format über TFileStream. Meine Idee wäre hierfür eine abstrakte BasisListe a la TCustomClientList. Diese enthält alle Methoden, welche von den abgeleiteten Klassen mit Leben befüllt werden (z.B. speichert die Methode "Save" bei TFileClientList die Daten über einen TFileStream, bei TDBClientList speichert die gleichnamige Methode die Daten in eine Datenbank.) Soweit kein Problem.

Nun möchte ich meiner "TMyComponent" die Möglichkeit geben, die verschiedenen abgeleiteten Klassen von TCustomClientList zu verwenden. Dazu fallen mir folgende Möglichkeiten ein:

1. Verschiedene TMyComponent-Klassen zu erstellen und jeweils die TClientList zu ändern. Dies hätte aber zur Folge, dass eine Änderung in TMyComponent in jeder Komponente gändert werden müsste da es sich ja nicht um Vererbung handelt, sondern um verschiedene Kopien von TMyComponent.

2. Ich könnte im Constructor von TMyComponent die entsprechende Liste (TFileClientList oder TDBClientList) mitgeben. Dann müsste ich die Liste allerdings extra in der Anwendung erstellen, was ich vermeiden möchte. Außerdem wäre es dann nicht mehr möglich, die Komponente auf die Form zu "klatschen", was ich aber unbedingt beibehalten möchte (Viele Events welche ich nicht manuell "umbiegen" möchte)

Mein Frage lautet also, welche hier die Best Practice für mein Vorhaben ist. Ich brauche also mehrere "Kopien" von TMyComponent, bei denen jeweils nur die FClientList anders ist. Gibt es da eine Möglichkeit (quasi TMyComponent ableiten und jeweils die private Variable "FClientList" zu überschreiben?)

Ich hoffe ich habe mein Problem einigermaßen verständlich erklärt, bei Rückfragen einfach melden

Besten Dank im Voraus!
Michael Kübler
  Mit Zitat antworten Zitat