Zum Inhalt springen

Service-Locator

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von 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

Erzeugungsmuster

Abstrakte Fabrik | Erbauer | Fabrikmethode | Prototyp | Singleton | Multiton | Objektpool

Strukturmuster

Adapter | Brücke | Decorator | Fassade | Fliegengewicht | Kompositum | Stellvertreter

Verhaltensmuster

Beobachter | Besucher | Interpreter | Iterator | Kommando | Memento | Schablonenmethode | Strategie | Vermittler | Zustand | Zuständigkeitskette | Interceptor | Nullobjekt | Protokollstapel

Muster für objekt-
relationale Abbildung

Datentransferobjekt | Table Data Gateway | Row Data Gateway | Active Record | Unit of Work | Identity Map | Lazy Loading | Identity Field | Dependent Mapping | Embedded Value | Serialized LOB | Inheritance Mapper | Metadata Mapping | Query Object | Command-Query-Responsibility-Segregation

Nachrichten-
übermittlungsmuster
andere

Application Controller | Business Delegate | Data Access Object | Dependency Injection | Extension Interface | Fluent Interface | Inversion of Control (IoC) | Lock | Model View Controller (MVC) | Model View Presenter (MVP) | Model View Update (MVU) | Model View ViewModel (MVVM) | Page Controller | Registry | Remote Facade | Repository | Service Locator | Session State | Table Module | Template View | Threadpool | Transaction Script | Transform View | Two-Step View | Value Object

Vorlage:Klappleiste/Ende