Ich habe durch Misko Heverys Guide: Writing Testable Code gelesen.Wer ist verantwortlich für das Anhängen von Listenern in einem Injizierungsschema ohne Initialisierung?
Ich kaufe auf jeden Fall in Abhängigkeitsinjektion als ein großartiges Werkzeug, um die Testbarkeit zu verbessern, und verwenden Sie es sehr in meinem Code. Wenn ich jedoch den ersten Teil des Handbuchs "Flaw #1: Constructor does Real Work" lese, finde ich, dass ich immer noch ein wenig verschwommen darüber bin, wie man Hörer-Hörer mit Kabel verbinden soll.
Nehmen wir an, ich habe eine Klasse, die, um richtig zu funktionieren, einen Listener an eines der Argumente anhängen muss, das über Konstruktor-Abhängigkeitsinjektion übergeben wird. Laut dem Handbuch sollte der Konstruktor seine Argumente nur den Membervariablen zuweisen und keine anderen Aufgaben ausführen. Darüber hinaus sollte das Objekt vollständig initialisiert werden, wenn der Konstruktor beendet wird. In diesem Fall würde das Objekt jedoch nicht vollständig initialisiert werden, es sei denn, es ist erforderlich, dass Zuhörer angeschlossen sind.
So weit ich sagen kann, erfordert dies die Anbindung aller Listener im Builder oder Factory, obwohl dies scheint sehr vom Objekt selbst entkoppelt, und leicht aus der Synchronisation geraten. Zusätzlich dazu (zumindest in Actionscript, wo ich die meiste Zeit in diesen Tagen verbringe), würde dies bedeuten, dass meine Ereignis-Listener nicht länger privat sein könnten, da der Hersteller/Fabrikant sie sehen müsste.
Was ist der beste Weg, damit umzugehen? Gibt es eine andere Option, die ich hier vermisse?
Wie hoch ist die Lebensdauer der Listener-Objekte? Leben sie länger als dein Hauptobjekt? Wenn sie eine kürzere Lebensdauer haben als das Hauptobjekt, sollten sie nicht über den Konstruktor übergeben werden. – Runcible