Valdymo inversija ir priklausomybės injekcija „Java“ / pavasaris

Turinys
Tai ketvirtoji pamokų serijos dalis, skirta apžvelgti pagrindines „Java“ kalbos temas, kad skaitytojas būtų pasirengęs naudotis „Spring Framework“. Pirmąją šios pamokos serijos dalį galite gauti čia, antrąją - čia, trečiąją - čia. Šioje pamokoje pamatysime 2 pagrindines sąvokas, kurias turime išspręsti, jei norime teisingai naudoti „Spring“: valdymo inversija ir priklausomybės įpurškimas.
Pirmiausia noriu paaiškinti, kad šiame straipsnyje šias sąvokas daug geriau paaiškina Martynas Fowleris ir šiame puslapyje išverstos į ispanų kalbą, tačiau ketinu pabandyti apibendrinti šią sąvoką, kad ji būtų lengvai suprantama ir sutaupytų šiek tiek skaitymo straipsnį (nors nuoširdžiai kviečiame jį perskaityti, jei turite daugiau klausimų).
Terminas yra palyginti neseniai, tačiau tai yra programavimo modelis, kuris grįžta prie tų programų, sukurtų naudojant gryną nuoseklųjį programavimą, kai vienas programuotojas (arba programuotojų grupė) susėdo ir parašė keletą veiksmų ar skaičiavimo instrukcijų, kurios turi būti atliktos tobulai seka. nuo pradžios iki pabaigos, siekiant gauti paskutinį rezultatą.
Šiuo metu (nemanau, kad tai buvo prieš daugelį metų) kvietimai į metodus ir bibliotekas visada buvo gaunami iš centrinio šaltinio, kuris buvo atsakingas už manipuliavimą visais tos pačios programos kintamaisiais. Vėliau buvo sukurtos grafinės sąsajos, kurios buvo atsakingos už programos duomenų įvesties valdymą, o pagrindinis programos srautas buvo atsakingas už tvarkytojų teikimą įvykiams, įvykusiems grafinėje sąsajoje (spustelėjus šį klavišą kažkas suaktyvinama , judindami pelę ir pan.), kol sąsaja yra pastovios kilpos. Tokiu būdu programos valdymas yra atvirkštinis, grafinė sąsaja yra atsakinga už pagrindinio srauto pranešimą, ką ir kaip daryti, ir nereikia tiksliai žinoti, kaip tai daroma.
Jei pastebėjote, „Java“ sąsajos gali padėti perduoti programos valdymą išoriniams agentams, tačiau ši sąvoka taikoma demonų gijoms, kurios laukia, kol įvykis įvyks - tai klasė, atsakinga už kitų klasių diegimo inicijavimą ir pristatymą programa (gamyklos modelis) ir iš esmės bet koks modelis, leidžiantis perduoti programos valdymą kokiam nors išoriniam agentui.
Tai yra tam tikras valdymo inversijos tipas, kai A klasė nežino, kurį objektą ji naudos kompiliavimo metu, o žino tik veiksmus, kuriuos turi atlikti su tuo objektu. Tarkime, kad ši klasė (pagrįsta mano ankstesnėje pamokoje sukurtomis klasėmis):
 public class Draftsman {public Square aikštė; public Cartoonist () {square = new Square (); } public void MasterDraw () {square.Draw (); }} 

Kaip matysite, ši klasioklė „Draftsman“ visiškai priklauso nuo „Square“ klasės, nes ji yra atsakinga už kvadratinio objekto, kurį jis vėliau naudos, gyvavimo ciklą. Šis „Draftsman“ klasės kūrimo būdas yra labai nepraktiškas, nes jei vėliau norėtume, kad rengėjas nupieštų stačiakampius ar trikampius, tam turėtume pakeisti pagrindinį kodą.
Vietoj to, mes galime sukurti daugkartinio naudojimo klasę, jei įgyvendinsime „piešiamą“ sąsają, kurią sukūrėme ankstesnėje pamokoje:
 public class Draftsman {public Piešiamas piešinys; public Draftsman (Drawable d) {piešimas = d; } public void MasterDrawing () {piešimas.Piešimas (); }} 

Tokiu būdu „Draftsman“ klasės objektai „nekontroliuoja“ objekto, kurį jie turi piešti, bet tik žino, kad jis įgyvendina „Drawable“ sąsają, o vėliau ir šiuos „Draftsman“ objektus, kuriuos aš sukursiu savo programoje arba kad kažkas kitaip ketinama naudoti programoje, kuri pasiekia mano objektų biblioteką, jie puikiai gali priimti bet kokį objektą, kuriame įdiegta „Nubraižoma“ sąsaja.
Ankstesniame pavyzdyje mes taikome tai, kas vadinama "Konstruktorius Inyection" kadangi priklausomybė įšvirkščiama konstruktoriaus lygiu, tačiau priklausomybę galite įšvirkšti ir per „Nustatytojus“ arba, kitomis programavimo kalbomis, galite įterpti parametrus ar sąsajas („Java“ negalite keisti parametrų ar sąsajų, kurios priima metodas vykdymo metu, tačiau, pavyzdžiui, „Python“ leidžia metodams priimti parametrus nenurodant parametrų tipo.)
 public class Draftsman {public Piešiamas piešinys; public void setDrawing (piešiamas d) {piešimas = d; } public void MasterDrawing () {piešimas.Piešimas (); }} 

The priklausomybės injekcija iš esmės leidžia atskirti jūsų programos funkcijas. Ši nepriklausomybė leidžia jums išbandyti savo klases (ne verta pakartoti), kad jūsų klasė būtų susieta su niekuo. Ši nepriklausomybė yra vienas iš pagrindinių elementų, kuriuos reikia naudoti Pavasaris, komponentai priklauso nuo sistemos, o ne nuo programos, galite kurti objektus, esančius ne jūsų programoje, ir naudoti juos tik tada, kai jums to reikia.
Nuo kitos pamokos mes pradėsime tiesiogiai dirbti su „Spring“ ir pamatysite, kaip visos iki šiol matytos sąvokos yra susijusios su jo veikimu ir leis jums per trumpą laiką įgyti reikiamos patirties.
Laukiu jūsų komentarų, iki kito karto!Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave