Inversion-of-Control

Aus Eclipse
Version vom 15. Juli 2010, 14:05 Uhr von Thies (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Don´t call us, we call you. Ist der Spruch, mit dem laut Legende die Schauspieleragentur in Hollywood Bewerber beglückte.
Gemeint ist hier: Ja, wir kennen Dich nun, wenn wir Dich brauchen, rufen wir Dich an. Genau nach diesem Prinzip funktioniert auch der Plugin Workflow. Die Rolle der Schauspieleragentur wird dabei natürlich vom Framework übernommen. Die Bundles sind entweder die Schauspieler oder der Produzent der einen Schauspieler benötigt. Damit Schauspieler gefunden werden können, müssen diese sich erst einmal registrieren, genau wie ein Bundle am Framework. Wird in einer Produktion ein bestimmter Schauspieler benötigt, wird dieser durch die Schauspieleragentur vermittelt, ebenfalls genau wie im Equinox - Framework.

Dieses Prinzip ist auch als das Inversion-of-Control Pattern bekannt. Dieses Pattern gibt es unter anderem in den Ausprägungen Service Locator und Dependency Injection.

Dependency Injection

Hier werden zwei Objekte voneinander entkoppelt, indem ein Objekt ein Interface bereitstellt das vom anderem Objekt implementiert wird. Das Objekt, dass das Interface implementiert sollte keine Kenntnis von dem, dieses Interface veröffentlichenden, Objekt haben. Umgekehrt soll aber auch das Objekt das das Interface veröffentlicht hat und Implementationen des Interfaces nutzen möchte, zur Entwicklungszeit keine Kenntnis von implementierenden Objekten bekommen. Die konkreten Instanzen werden zur Laufzeit von einem sog. Assembler erzeugt und das eine Objekt (das Interface implementierende Objekt) dem anderen Objekt (das Interface veröffentlichende Objekt) injiziert. So weit das Dependency Injection Pattern.
Belegen wir die Begriffe Objekte, Interface und Assembler mit Begriffen aus der Equinoxwelt, so werden die Zusammenhänge offensichtlich:

Möchte ein Plugin das einen Extension-Point definiert eine entsprechende Extension nutzen muss es am Framework eine Instanz dieser der Extension Klasse erfragen. Dies entspricht dem Prinzip des Dependency Injection Patterns.

Service Locator

Das Service Locator Pattern ist noch leichter wiederzuerkennen. Ein Plugin erfragt einen Service am Framework. Dieses liefert eine Instanz des Service zurück, welche dann vom Plugin genutzt werden kann. Plugins nehmen hier also die Rolle des Services ein und das Framework die Rolle des Service-Locators.