Wzór lokalizatora usług
Wzorzec lokalizatora usług to wzorzec projektowy używany w tworzeniu oprogramowania do enkapsulacji procesów związanych z uzyskaniem usługi z silną warstwą abstrakcji . Wzorzec ten wykorzystuje centralny rejestr zwany „lokalizatorem usług”, który na żądanie zwraca informacje niezbędne do wykonania określonego zadania. Zwolennicy tego wzorca twierdzą, że podejście to upraszcza aplikacje oparte na komponentach, w których wszystkie zależności są wyraźnie wymienione na początku całego projektu aplikacji, co w konsekwencji czyni tradycyjne wstrzykiwanie zależności bardziej złożonym sposobem łączenia obiektów. Krytycy wzorca argumentują, że jest to antywzorzec , który zaciemnia zależności i utrudnia testowanie oprogramowania. [ potrzebne lepsze źródło ]
Zalety
- „Lokalizator usług” może działać jako prosty konsolidator w czasie wykonywania . Pozwala to na dodawanie kodu w czasie wykonywania bez ponownej kompilacji aplikacji, aw niektórych przypadkach nawet bez konieczności jej ponownego uruchamiania.
- Aplikacje mogą optymalizować się w czasie wykonywania, selektywnie dodając i usuwając elementy z lokalizatora usług. Na przykład aplikacja może wykryć, że ma lepszą dostępną bibliotekę do odczytu obrazów JPG niż domyślna i odpowiednio zmodyfikować rejestr.
- Duże sekcje biblioteki lub aplikacji można całkowicie oddzielić . Jedynym łącznikiem między nimi staje się rejestr.
- Aplikacja może wykorzystywać wiele lokalizatorów usług strukturalnych przeznaczonych do określonej funkcjonalności/testowania. Lokalizator usług nie wymaga jednej klasy statycznej na proces.
- Rozwiązanie może być prostsze z lokalizatorem usług (w porównaniu z wstrzykiwaniem zależności) w aplikacjach o dobrze ustrukturyzowanym projekcie komponentu/usługi. W takich przypadkach wady można właściwie uznać za zaletę (np. brak konieczności dostarczania różnych zależności do każdej klasy i utrzymywania konfiguracji zależności).
Niedogodności
- Rejestr ukrywa zależności klas, powodując błędy w czasie wykonywania zamiast błędów w czasie kompilacji, gdy brakuje zależności (podobnie jak w przypadku wstrzykiwania zależności ). Ale każda biblioteka jest kompilowana, tylko odkrycie konkretnej klasy może nie zostać znalezione i spowodować błąd, jest to bardziej problem z wdrożeniem niż problem z lokalizatorem usług.
- Rejestr utrudnia testowanie kodu , ponieważ wszystkie testy muszą wchodzić w interakcje z tą samą globalną klasą lokalizatora usług, aby ustawić fałszywe zależności testowanej klasy. Można to jednak łatwo przezwyciężyć, wstrzykując klasy aplikacji za pomocą jednego interfejsu lokalizatora usług. Symulator można zaimplementować tak, aby symulował każdy interfejs udostępniany przez lokalizator usług, więc łatwo jest zamienić rzeczywistą implementację na symulator.
Zobacz też
- ^ „Odwrócenie kontenerów kontrolnych i wzorzec wstrzykiwania zależności” .
- Bibliografia _ „Lokalizator usług to antywzorzec” . blog.ploeh.dk . Źródło 2017-06-01 .
Linki zewnętrzne
- Przykładowy kod
- W obronie lokalizatora usług
- Wzorce programowania gier: lokalizator usług
- Zależności w przebraniu
- Mity i truizmy dotyczące inżynierii oprogramowania