Inversion of Control (IoC), nebo také obrácené řízení, je návrhový vzor, který umožňuje uvolnit vztahy mezi jinak těsně svázanými komponentami. V klasickém modelu programování vytváříme nějakou třídu, která pak využívá další třídy a tak dále. Tím jsou potom třídy velmi pevně svázány a změna používané třídy za jinou vyžaduje zásah do kódu. IoC umožňuje uvolnit tuto vazbu, což nejjednodušeji vystihuje Hollywoodský princip „Nevolejte nám, my se ozveme.“ [1]. To je klasická odpověď, kterou dostávají amatérští herci, kteří se snaží získat v Hollywoodu nějakou roli ve filmu, seriálu apod. Proto tedy Hollywoodský princip. V podstatě to znamená, že třída nevytváří sama instance dalších tříd, které potřebuje, ale jsou jí dodány nějakým způsobem z vnějšku. Těchto způsobů existuje několik, nejznámější jsou tři: [2]
IoC si ještě ukážeme na jednoduchém příkladu. Mějme třídu SeznamAut, která umí pomocí nějaké své metody získat seznam všech aut od některého výrobce. V metodě, která se bude jmenovat ziskejSeznamPodleVyrobce využívá třídu VyhledavacAut, pomocí které získá auta právě od vybraného výrobce. To je tedy klasický přístup bez využití IoC kontejneru, názorně ho můžeme zobrazit podle obrázku:
Z obrázku je názorně vidět, že SeznamAut potřebuje znát implementace rozhraní VyhledavacAut a je s ním tak velmi těsně svázán. Pro uvolnění této vazby můžeme využít právě IoC. Místo toho, aby SeznamAut inicializoval třídu VyhledavacAutImplementace, využije některou z technik IoC, například bude mít setter metodu, pomocí které mu bude nastavena nějaká implementace rozhraní VyhledavacAut. Nemusí už tedy znát implementaci rozhraní, kterou bude využívat. K tomu je ale potřeba, aby zde existoval právě nějaký IoC kontejner, který se o toto postará. Opět ilustrujeme názorně pomocí obrázku:
Z obrázku je patrné, že SeznamAut je nyní závislý pouze na rozhraní VyhledavacAut. Tím jsme uvolnili závislost mezi třídou SeznamAut a konkrétní implementací rozhraní VyhledavacAut. O sestavení jednotlivých komponent dohromady se nyní stará IoC kontejner.
Dependency injection (DI), nebo také vkládání závislostí, je v podstatě novější název pro IoC, zužuje ale také okruh, na který se vztahuje. Jedná se už o konkrétní techniku využití IoC. DI má několik zásadních výhod pro programování, jsou to zejména tyto:
DI má samozřejmě i některé nevýhody, mezi nejvýznačnější patří tyto[8]:
[9] Integrated Development Environment
je vidět, že na tom makáš - jen tak dál, vypadá to zajímavě;-)!
No... doufám, že z těch obrázků je něco vidět :-)
Vidět jo, jen se to blbě čte:-D....
Pro přidání komentáře se musíš přihlásit nebo registrovat na signály.cz.