Kontroles un atkarības ievadīšanas inversija Java / pavasarī

Satura rādītājs
Šī ir ceturtā daļa no apmācību sērijas, kas vērsta uz Java valodas pamattēmu pārskatīšanu, lai sagatavotu lasītāju pavasara ietvara izmantošanai. Šīs apmācības sērijas pirmo daļu var iegūt šeit, otro daļu var iegūt šeit un trešo daļu šeit. Šajā apmācībā mēs redzēsim 2 pamatjēdzienus, ar kuriem mums jārīkojas, ja vēlamies pareizi izmantot pavasari: kontroles maiņa un atkarības injekcija.
Vispirms es vēlos precizēt, ka Martin Fowler šajā rakstā daudz labāk izskaidro šos jēdzienus un tulko spāņu valodā šajā lapā, taču mans nodoms ir mēģināt apkopot šo jēdzienu, lai tas būtu viegli saprotams un nedaudz ietaupītu lasot šo rakstu. raksts (lai gan jūs esat laipni aicināti to izlasīt, ja jums ir vairāk jautājumu).
Termins ir salīdzinoši nesen, taču tas ir programmēšanas modelis, kas aizsākās tajās programmās, kas izveidotas, izmantojot tīru secīgu programmēšanu, kur viens programmētājs (vai programmētāju grupa) apsēdās, lai uzrakstītu virkni darbību vai skaitļošanas norādījumus, kas jāveic nevainojami no sākuma līdz beigām ar nolūku iegūt pēdējo rezultātu.
Šajā laikā (nedomāju, ka tas bija pirms daudziem gadiem) zvani uz metodēm un bibliotēkām vienmēr nāca no centrālā avota, kas bija atbildīgs par manipulācijām ar visiem vienas programmas mainīgajiem. Vēlāk tika izstrādātas grafiskās saskarnes, kas bija atbildīgas par programmas datu ievades pārvaldību, savukārt programmas galvenā plūsma bija atbildīga par apstrādātāju nodrošināšanu notikumiem, kas notika grafiskajā interfeisā (aktivizē kaut ko, noklikšķinot, nospiežot šo taustiņu , pārvietojot peli utt.), kamēr saskarne ir nemainīgā cilpā. Tādā veidā programmas vadība tiek mainīta, grafiskais interfeiss ir atbildīgs par galvenās plūsmas paziņošanu par to, kas un kā jādara, nezinot, KĀ tas tiek darīts.
Ja pamanāt, saskarnes Java var palīdzēt jums nodot lietojumprogrammas kontroli ārējiem aģentiem, taču šī koncepcija ir piemērojama dēmonu pavedieniem, kas gaida notikuma uzliesmošanu - klase, kas ir atbildīga par citu klašu ieviešanas tūlītēju nodošanu un piegādi programma (rūpnīcas modelis) un būtībā jebkurš modelis, kas ļauj pārraidīt programmas kontroli kādam ārējam aģentam.
Tas ir īpašs vadības inversijas veids, kurā A klase apkopošanas brīdī nezina, kuru objektu tā izmantos, bet zina tikai darbības, kas tai jāveic ar šo objektu. Pieņemsim šādu klasi (kuras pamatā ir manā iepriekšējā apmācībā izveidotās nodarbības):
 public class Draftsman {public Square square; publiskais karikatūrists () {kvadrāts = jauns laukums (); } public void MasterDraw () {square.Draw (); }} 

Kā redzēsit, šī "Draftman" klase ir pilnībā atkarīga no "Square" klases, jo tā ir atbildīga par kvadrātveida objekta dzīves ciklu, ko tas vēlāk izmantos. Šis veids, kā izveidot "Draftsman" klasi, ir ļoti nepraktisks, jo, ja vēlāk mēs gribētu, lai draftētājs uzzīmē taisnstūrus vai trīsstūrus, mums tas būtu jāmaina.
Tā vietā mēs varam izveidot vairākkārt lietojamu klasi, ja ieviešam zīmējamo interfeisu, ko izveidojām iepriekšējā apmācībā:
 public class Draftsman {public Zīmējams zīmējums; public Draftsman (Drawable d) {rasējums = d; } public void MasterDrawing () {drawing.Drawing (); }} 

Tādā veidā klases "Draftsman" objekti "nekontrolē" zīmējamo objektu, bet tikai zina, ka tas īsteno Drawable interfeisu un vēlāk šos "Draftman" objektus, kurus es izveidošu savā lietojumprogrammā vai ka kāds citādi tiks izmantots lietojumprogrammā, kas piekļūst manai objektu bibliotēkai, tās lieliski spēj saņemt jebkuru objektu, kas īsteno "Drawable" saskarni.
Iepriekšējā piemērā mēs izmantojam tā saukto "Konstruktors Inyection" tā kā atkarība tiek ievadīta konstruktoru līmenī, bet jūs varat ievadīt atkarību arī caur "Iestatītājiem" vai, citās programmēšanas valodās, varat ievadīt parametrus vai saskarnes (Java jūs nevarat mainīt parametrus vai saskarnes, kas pieņem metode izpildes laikā, bet, piemēram, Python ļauj metodēm pieņemt parametrus, nenorādot parametru veidu.)
 public class Draftsman {public Zīmējams zīmējums; public void setDrawing (Drawable d) {zīmējums = d; } public void MasterDrawing () {drawing.Drawing (); }} 

atkarības injekcija būtībā ļauj nošķirt jūsu programmas funkcijas. Šī neatkarība ļauj pārbaudīt savas nodarbības, (nav vērts atkārtot), ka jūsu nodarbības nav saistītas ar kaut ko. Šī neatkarība ir viena no galvenajām lietām Pavasaris, komponenti ir atkarīgi no ietvara, nevis no lietojumprogrammas, jūs varat izveidot objektus, kas pastāv ārpus jūsu lietojumprogrammas, un izmantot tos tikai tad, kad tie ir nepieciešami.
No nākamās apmācības mēs sāksim strādāt tieši ar Spring, un jūs redzēsiet, kā visi līdz šim redzētie jēdzieni ir saistīti ar tā darbību un ļaus jums īsā laikā iegūt nepieciešamās zināšanas.
Gaidu jūsu komentārus, līdz nākamajai reizei!Vai jums patika šī apmācība un palīdzējāt tai?Jūs varat apbalvot autoru, nospiežot šo pogu, lai sniegtu viņam pozitīvu punktu

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave