Moin,
Die Wiederverwendbarkeit kann man ebenfalls kapseln ohne dass Abhängigkeiten außerhalb einer Klasse hergestellt werden müssen. Z.B. in einer Factory.
Damit habe ich dann aber trotzdem im Endeffekt ein 1:1-Verhältnis von Cookie- zu HTTP-Objekten und verliere den Vorteil, den ein Cookie-Objekt für mehrere HTTP-Objekte haben kann.
Da Problem ist ja nicht die Übergabe einer Instanz schlechthin in den Konstruktor einer anderen Klasse.
Hier steht etwas Anderes:
Eine Übergabe von Instanzen in den Konstruktor anderer Klassen hat sich immer wieder als problematisch erwiesen.
Das Problem verstehe ich nicht:
Das Problem ist, dass die Daten-Kapselung verlorengeht wenn Abhängigkeiten außerhalb der Klasse hergestellt werden. Ein Cookieobjekt arbeitet mit Request und Response zusammen und wird dadurch ggf. auch verändert und da fließen Daten. Solche Veränderungen und der Datenfluß werden infolge DI nach außen getragen -- was daran sollte denn da geteilt werden? Nein! Und nochmals Nein, alles was einen Request/Response Zyklus betrifft, darf sich nur in der Instanz derjenigen Klasse abspielen die diesen Zyklus handelt!
Wieso geht die Datenkapselung verloren, wenn ich dafür wohl definierte Schnittstellen bereitstelle? Und es ist in der OOP doch vorgesehen, dass Objekte sich gegenseitig „Nachrichten“ schicken.
Im Bezug auf das Cookie-Beispiel: Nehmen wir an, ich verwende ein Cookie-Objekt für mehrere Requests, dann werden dessen Daten, die zuvor bspw. aus einer Datei gelesen worden sind, geteilt. Und ein Cookie, welches per HTTP gesetzt wird, aktualisiert den Zustand des Cookie-Objekts, der in allen nachfolgenden Requests zur Verfügung steht. Was soll daran schlecht sein?
Also kriegt bspw. der Konstruktor für einen HTTPClient einen Dateinamen übergeben, nämlich den den das in den HTTPClient eingebaute Cookie-Objekt braucht damit es weiß wo die Dinger gespeichert werden sollen.
Und dieses CookieObjekt wird nicht übergeben sondern
- Im Konstruktor des HTTPCLient erstellt
- und an Ort und Stelle in die Instanz des HTTPClient eingebaut.
Das heißt an statt über das eine Cookie-Objekt im Arbeitsspeichere mehrere Request-Objekte synchron zu halten würdest du das dann über eine Datenbank oder Datei realisieren?
Viele Grüße
Robert