Also ich finde der Hauptschwachpunkt bei
Indy ist die Klassenhierarchie.
Fast alle
TCP-Protokolle (
FTP, HTTP,
SMTP, ...) sind von TIdTcpClient abgeleitet, was nicht richtig ist.
Die Klassen, die diese Protokolle implementieren dürften nicht abgeleitet sein, sondern müssten ein bidirektionales Streamobjekt benützen.
Sobald eine
TCP-Verbindung aufgebaut ist, hat sie nur noch 3 Funktionen: senden, empfangen und schliesen.
Eine geöffnete serielle Schnittstelle hat rein logisch betrachtet genau die gleichen Funktionen.
Wäre
Indy besser aufgebaut, dann könnte man z.B. Ketten von Komponenten bilden:
Code:
IdSMTP <--> IdEncyptDecrypt <--> IdMultiplexer <--> IdTCPSocket
IdTelnet <--> IdEncyptDecrypt <--^
In dem Beispiel werden 2 Protokolle verschlüsselt über eine einzige
TCP-Verbindung geführt.
Anstelle von
TCP könnte man genausogut Bluetooth, Firewire oder Named Pipes verwenden.
Auf jeden Fall sollten der Datentransport und das Protokoll streng voneinander getrennt sein.
Statt Vererbung müsste
Indy die
Delegation als Prinzip verwenden.