Service-Locator
Ein Service-Locator ({{Modul:Vorlage:lang}} Modul:Vorlage:lang:103: attempt to index field 'wikibase' (a nil value)) oder Resource-Locator ({{Modul:Vorlage:lang}} Modul:Vorlage:lang:103: attempt to index field 'wikibase' (a nil value)) ist ein von Martin Fowler vorgestelltes Architekturmuster der Softwareentwicklung.<ref name="baharestani2013" /> Beim Service-Locator gibt es ein zentrales Objekt, die Registrierung ({{Modul:Vorlage:lang}} Modul:Vorlage:lang:103: attempt to index field 'wikibase' (a nil value)), welche auf Anfrage nach einem bestimmten Objekttyp ein entsprechendes Objekt zurückliefert.<ref name="fowlerInjection" />
Service-Locators werden eingesetzt,
- um die Dependency-Injection zu bootstrappen, d. h. als Zwischenschritt im Refactoring, um eine Anwendung von festen Abhängigkeiten auf Dependency-Injection umzustellen, oder
- um eine dynamische Rekonfigurierung der zu ladenden Objekte während der Laufzeit zu bieten,
- wenn sie durch ein verwendetes Framework erzwungen werden.
Service-Locator als Anti-Pattern[Bearbeiten]
Häufig wird ein Service-Locator von unerfahrenen Entwicklern anstatt von Dependency-Injection verwendet. Dies liegt darin begründet, dass sich Dependency-Injection-Frameworks auch zur Implementierung von Service-Locators eignen. Ein Service-Locator hat jedoch den Nachteil, dass Abhängigkeiten versteckt werden. Durch die versteckten Abhängigkeiten wird es schwerer den Code zu testen und Refactorings durchzuführen. Zudem treten Fehler in der Konfiguration erst zur Laufzeit auf. In diesem Kontext gilt das Service-Locator-Muster daher als Anti-Pattern.<ref name="baharestani2013" />
Einzelnachweise[Bearbeiten]
<references> <ref name="baharestani2013"> </ref> <ref name="fowlerInjection"> Martin Fowler: Inversion of Control Containers and the Dependency Injection pattern. 23. Januar 2004, abgerufen am 25. März 2017 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)). </ref> </references>
Die Seite Vorlage:Erweiterte Navigationsleiste/styles legacy.css hat keinen Inhalt.Vorlage:Klappleiste/Anfang