Programování

Vynikající vysvětlení závislého vstřikování (inverze ovládání)

Přečetl jsem spoustu vysvětlení ohledně Dependency Injection nebo DI (dříve známého jako Inverze kontroly) a souvisejícího hollywoodského principu („Nevolajte nám, zavoláme vám.“). Všichni mají tendenci být nejasní, buď proto, že se ponoří do velmi podrobných vysvětlení, nebo svážou vysvětlení konkrétně s jednou konkrétní technologií. Takové, že buď je vzor ztracen, nebo je jeho jednoduchost. Zde je nejjasnější vysvětlení, které jsem našel - mírně upravené pro stručnost (z velmi dobrého Spring in Action, 2. vydání, Craig Walls):

„Jakákoli netriviální aplikace je tvořena dvěma nebo více třídami, které navzájem spolupracují při provádění určité obchodní logiky. Každý objekt je tradičně odpovědný za získání vlastních odkazů na objekty, se kterými spolupracuje (jeho závislosti). Při použití DI objekty dostávají své závislosti v době vytvoření nějakou externí entitou, která koordinuje každý objekt v systému. Jinými slovy, závislosti se vkládají do objektů. "

Považuji to za velmi jasné.

Injekce závislostí se původně nazývala Inverze řízení (IoC), protože normální řídicí sekvence by byla tak, že objekt sám vyhledá objekty, na kterých závisí, a poté je zavolá. Tady je to obráceno: Závislosti jsou předány objektu, když je vytvořen. To také ilustruje hollywoodský princip v práci: Nevolávejte kvůli svým závislostem, dáme vám je, když vás budeme potřebovat.

Pokud nepoužíváte DI, pravděpodobně vás zajímá, proč je to velký problém. Poskytuje klíčovou výhodu: volné spojení. Objekty lze přidávat a testovat nezávisle na jiných objektech, protože nezávisí na ničem jiném, než na tom, co jim předáte. Při použití tradičních závislostí musíte k otestování objektu vytvořit prostředí, kde existují všechny jeho závislosti a jsou dosažitelné, než ho budete moci otestovat. S DI je možné otestovat objekt izolovaně a předat jej falešným objektům pro ty, které nechcete nebo nepotřebujete vytvořit. Podobně je usnadněno přidání třídy do projektu, protože třída je samostatná, takže se tak vyhnete „velkému vlasovému kouli“, z něhož se velké projekty často vyvinou.

Úkolem DI je napsat celou aplikaci pomocí ní. Několik tříd není velký problém, ale celá aplikace je mnohem obtížnější. U celých aplikací často chcete, aby framework spravoval závislosti a interakce mezi objekty. Rámce DI jsou často řízeny soubory XML, které pomáhají určit, co komu a kdy předat. Jaro je full-service Java DI framework; další lehčí DI rámce zahrnují NanoContainer a ještě lehčí PicoContainer.

Většina z těchto rámců má dobré výukové programy, které začátečníkům pomohou najít cestu.

Tento příběh, „Vynikající vysvětlení závislého vstřikování (inverze ovládání)“, byl původně publikován společností JavaWorld.