Decoupling to bardzo ogólna zasada obowiązująca w wielu dziedzinach. Inwersja zależności to specyficzna forma oddzielania, w której oddziela się wyższe poziomy systemu od niższych poziomów, rozdzielając je na biblioteki i wykorzystując interfejsy. Pozwala to na zastąpienie części niższego poziomu w systemie bez większych przeróbek.
Na przykład zamiast wyższych części systemu tworzących konkretne instancje klas niższego poziomu można użyć kontenera IoC, aby oddzielić sposób tworzenia obiektów.
Inwersja sterowania to zasada projektowania używana przez biblioteki szkieletowe, które pozwalają ramie odzyskać pewną kontrolę z aplikacji. Oznacza to, że struktura okienkowania może ponownie wywoływać kod aplikacji, gdy występują pewne zdarzenia interfejsu użytkownika. Martin Fowler używa terminu Hollywood Principle jak w Nie dzwoń do nas, zadzwonimy do ciebie. Oddzielenie jest ważną częścią inwersji kontroli.
Ale co ma kontener IoC , aby wykonać inwersję sterowania? To quote Martin Fowler:
Odwrócenie kontroli jest zbyt ogólnym terminem, przez co ludzie uważają to za mylące. W wyniku wielu dyskusji z różnymi rzecznikami IoC zdecydowaliśmy się na nazwę Dependency Injection.
(Zauważ, że Martin Fowler mówi o wtrysk zależność nie zależność inwersja.)
IoC kontener pomaga wdrożyć iniekcji zależność i być może lepsze byłoby określenie pojemnik zależność wtrysku. Jednak nazwa kontenera IoC wydaje się trzymać. Wstrzyknięcie zaleŜności jest waŜnym składnikiem inwersji zaleŜności, ale uŜycie pojemników IoC do wstrzykiwania zaleŜności moŜe być mylące, poniewaŜ inwersja kontroli jest szerszą i bardziej ogólną zasadą.
Podkreślasz, że nazewnictwo nie jest bardzo spójne, ale nie powinno to być dużym zaskoczeniem, ponieważ te warunki zostały niezależnie wynalezione i użyte, nawet jeśli nakładają się na siebie.
@Anton Gogolev: Oddzielenie jest pisane z dodatkowym "o": http://en.wikipedia.org/wiki/Decoupling#Software_Development –