Definicje
Odwrócenie kontroli jest paradygmatem projektowym, którego celem jest zmniejszenie świadomości konkretnych implementacji z kodu struktury aplikacji i zapewnienie większej kontroli nad komponentami aplikacji specyficznymi dla domeny. W tradycyjnym systemie zaprojektowanym z góry na dół logiczny przepływ aplikacji i świadomość zależności płyną z najwyższych komponentów, od tych zaprojektowanych jako pierwsze, do tych zaprojektowanych jako ostatnie. W związku z tym odwrócenie kontroli jest prawie dosłowne odwrócenie świadomości kontroli i zależności w aplikacji.
Wstrzykiwanie zależności jest wzorcem używanym do tworzenia instancji klas, na których opierają się inne klasy, nie wiedząc w czasie kompilacji, która implementacja zostanie wykorzystana do zapewnienia tej funkcjonalności.
Pracować razem
Odwrócenie kontroli może wykorzystywać wstrzykiwanie zależności, ponieważ do stworzenia komponentów zapewniających określoną funkcjonalność potrzebny jest mechanizm. Istnieją i są używane inne opcje, np. Aktywatory, metody fabryczne itp., Ale frameworki nie muszą odwoływać się do tych klas narzędzi użytkowych, gdy klasy frameworku mogą zaakceptować zależność (potrzebne).
Przykłady
Jednym z przykładów tych koncepcji w praktyce jest środowisko wtyczek w Reflector . Wtyczki mają dużą kontrolę nad systemem, mimo że aplikacja nie wiedziała nic o wtyczkach w czasie kompilacji. Dla każdej z tych wtyczek wywoływana jest jedna metoda Inicjuj, jeśli pamięć służy, co przekazuje kontrolę nad wtyczką. Framework nie wie, co zrobią, po prostu pozwala im to zrobić. Kontrola została przejęta z głównej aplikacji i przekazana komponentowi wykonującemu określoną pracę; odwrócenie sterowania.
Struktura aplikacji umożliwia dostęp do jej funkcji za pośrednictwem różnych dostawców usług. Wtyczka otrzymuje odniesienia do dostawców usług podczas jej tworzenia. Zależności te pozwalają wtyczce dodawać własne pozycje menu, zmieniać sposób wyświetlania plików, wyświetlać własne informacje w odpowiednich panelach itp. Ponieważ zależności są przekazywane przez interfejs, implementacje mogą się zmieniać, a zmiany nie spowodują uszkodzenia kod, o ile umowa pozostaje nienaruszona.
W tym czasie do tworzenia wtyczek użyto metody fabrycznej z wykorzystaniem informacji konfiguracyjnych, odbicia i obiektu Activator (przynajmniej w .NET). Obecnie istnieją narzędzia, takie jak MEF , które pozwalają na szerszy zakres opcji podczas wstrzykiwania zależności, w tym zdolność środowiska aplikacji do akceptowania listy wtyczek jako zależności.
Podsumowanie
Chociaż te koncepcje mogą być używane i zapewniają korzyści niezależnie, razem pozwalają na napisanie znacznie bardziej elastycznego, wielokrotnego użytku i testowalnego kodu. Jako takie są ważnymi koncepcjami przy projektowaniu rozwiązań obiektowych.