Inverze řízení a injekční závislost v Javě / na jaře

Obsah
Toto je čtvrtý díl série tutoriálů zaměřených na zopakování základních témat jazyka Java a přípravu čtenáře na používání Spring Framework. První část této série tutoriálů lze získat zde, druhou část lze získat zde a třetí část zde. V tomto tutoriálu uvidíme 2 základní koncepty, které musíme zvládnout, pokud chceme Spring používat správně: Inverze Control a Dependency Injection.
Nejprve chci objasnit, že tyto pojmy mnohem lépe vysvětluje Martin Fowler v tomto článku a přeloží je do španělštiny na této stránce, ale mým záměrem je pokusit se tento koncept shrnout, aby byl snadno srozumitelný a ušetřit vám trochu čtení článek (i když jste srdečně zváni si jej přečíst, pokud máte další otázky).
Termín je relativně nedávný, ale je to programovací vzor, ​​který sahá až k těm programům vytvořeným pomocí čistého sekvenčního programování, kde si jeden programátor (nebo skupina programátorů) sedl a napsal řadu kroků nebo výpočetních instrukcí, které mají být provedeny perfektně sekvence. od začátku do konce se záměrem získat poslední výsledek.
V této době (nemyslete si, že to bylo před mnoha lety) vždy volání metod a knihoven pocházelo z centrálního zdroje, který měl na starosti manipulaci se všemi proměnnými ve stejném programu. Později byla vyvinuta grafická rozhraní, která měla na starosti správu datových vstupů do programu, zatímco hlavní tok programu měl na starosti poskytování obslužných rutin pro události, ke kterým došlo v grafickém rozhraní (něco se aktivuje kliknutím, stisknutím této klávesy (pohyb myší atd.), zatímco je rozhraní v konstantní smyčce. Tímto způsobem je ovládání programu obráceno, grafické rozhraní má na starosti informování hlavního toku o tom, co dělat a jak, aniž by bylo nutné přesně vědět, JAK se to dělá.
Pokud si všimnete, rozhraní v Javě vám mohou pomoci přenést řízení aplikace na externí agenty, ale koncept je použitelný pro vlákna démonů, která čekají na spuštění události, třídu, která je zodpovědná za vytváření instancí a doručování implementací jiných tříd do program (tovární vzor) a v podstatě jakýkoli vzor, ​​který umožňuje přenos řízení programu na nějakého externího agenta.
Jedná se o konkrétní typ Inversion of Control, ve kterém třída A neví, který objekt bude v okamžiku kompilace používat, ale zná pouze akce, které musí s tímto objektem provést. Předpokládejme následující třídu (která je založena na třídách vytvořených v mém předchozím kurzu):
 veřejná třída Navrhovatel {veřejné náměstí; public Cartoonist () {square = new Square (); } public void MasterDraw () {square.Draw (); }} 

Jak uvidíte, tato třída „Draftsman“ zcela závisí na třídě „Square“, protože má na starosti životní cyklus čtvercového objektu, který později použije. Tento způsob vytvoření třídy „Navrhovatel“ je velmi nepraktický, protože pokud bychom později chtěli, aby kreslíř kreslil obdélníky nebo trojúhelníky, museli bychom k tomu upravit základní kód.
Místo toho můžeme vytvořit více opakovaně použitelnou třídu, pokud implementujeme rozhraní „Drawable“, které jsme vytvořili v předchozím kurzu:
 public class Navrhovatel {public Drawable drawing; public Draftsman (Drawable d) {drawing = d; } public void MasterDrawing () {drawing.Drawing (); }} 

Objekty třídy „Draftsman“ tímto způsobem „nekontrolují“ objekt, který mají nakreslit, ale pouze vědí, že implementuje rozhraní Drawable a později tyto objekty „Draftsman“, které vytvořím ve své aplikaci nebo že někdo else jde použít v aplikaci, která přistupuje k mé knihovně objektů, jsou dokonale schopné přijímat jakýkoli objekt, který implementuje rozhraní „Drawable“.
V předchozím příkladu aplikujeme to, co je známé jako „Konstruktor Inyekce“ protože závislost je injektována na úrovni konstruktoru, ale můžete ji aplikovat také pomocí "Setterů" nebo v jiných programovacích jazycích můžete vstřikovat parametry nebo rozhraní (V Javě nemůžete měnit parametry ani rozhraní, která akceptují metoda za běhu, ale například Python umožňuje metodám přijímat parametry bez určení typu parametrů.)
 public class Navrhovatel {public Drawable drawing; public void setDrawing (Drawable d) {drawing = d; } public void MasterDrawing () {drawing.Drawing (); }} 

The injekce závislosti v podstatě umožňuje oddělení funkcí vašeho programu. Tato nezávislost vám umožňuje testovat své třídy, aniž by (hodné opakování) byla vaše třída s čímkoli svázána. Tato nezávislost je jedním z klíčových prvků, které je třeba použít Jaro, komponenty závisí na rámci a ne na aplikaci, můžete vytvářet objekty, které existují mimo vaši aplikaci, a používat je, jen když je potřebujete.
Od dalšího tutoriálu začneme pracovat přímo s Springem a uvidíte, jak všechny koncepty, které jsme dosud viděli, souvisejí s jeho fungováním a umožní vám získat potřebné odborné znalosti v krátkém čase.
Čekám na vaše komentáře, až příště!Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave