Ein Service-Locator (englisch service locator) oder Resource-Locator (englisch resource locator) ist ein von Martin Fowler vorgestelltes Architekturmuster der Softwareentwicklung. Beim Service-Locator gibt es ein zentrales Objekt, die Registrierung (englisch registry), welche auf Anfrage nach einem bestimmten Objekttyp ein entsprechendes Objekt zurückliefert.
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
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.
Einzelnachweise
- 1 2 Daniel Baharestani: Mastering Ninject for Dependency Injection. Packt Publishing, 2013, ISBN 978-1-78216-620-7 (englisch, 142 S.).
- ↑ Martin Fowler: Inversion of Control Containers and the Dependency Injection pattern. 23. Januar 2004, abgerufen am 25. März 2017 (englisch).