Инверзија контроле и ињектирање зависности у Јави / Спрингу

Преглед садржаја
Ово је четврти део низа водича усредсређених на преглед основних тема језика Јава како би се читаоци припремили за употребу Спринг Фрамеворк -а. Први део ове серије водича можете преузети овде, други део можете преузети овде, а трећи део овде. У овом водичу ћемо видети 2 основна концепта са којима се морамо носити ако желимо правилно користити Спринг: Инверзија контроле и Убризгавање зависности.
Пре свега, желим да појасним да је Мартин Фовлер ове појмове много боље објаснио у овом чланку и превео на шпански на овој страници, али моја намера је да покушам да резимирам концепт како би био лако разумљив и уштедео вам мало читања чланак (иако сте срдачно позвани да га прочитате ако имате још питања).
Израз је релативно нов, али то је програмски узорак који сеже до оних програма насталих коришћењем чистог секвенцијалног програмирања, где је један програмер (или група програмера) сео да напише низ корака или рачунске инструкције које треба извршити савршено редослед од почетка до краја са намером да се добије последњи резултат.
У то време (немојте мислити да је то било пре много година) позиви методама и библиотекама увек су долазили из централног извора који је био задужен за манипулисање свим променљивим у истом програму. Касније су развијени графички интерфејси који су били задужени за управљање улазима података у програм, док је главни ток програма био задужен за обезбеђивање руковаоца за догађаје који су се догодили у графичком интерфејсу (активира нешто при клику, притиском на овај тастер , померање миша итд.) док је интерфејс у ​​сталној петљи. На овај начин, контрола програма је обрнута, графички интерфејс је задужен за обавештавање главног тока шта и како да ради, а да не мора знати тачно КАКО се то ради.
Ако приметите, интерфејси у Јави могу вам помоћи да пренесете контролу над апликацијом на спољне агенте, али концепт је применљив на демонске нити које чекају да се догоди догађај, класа која је одговорна за инстанцирање и испоруку имплементација других класа на програм (фабрички образац) и у суштини било који образац који омогућава преношење контроле над програмом на неки спољни агент.
То је посебна врста инверзије контроле у ​​којој класа А не зна који ће објект користити у тренутку састављања, већ само зна радње које мора предузети с тим објектом. Претпоставимо следећу класу (која се заснива на класама направљеним у мом претходном водичу):
 цртач јавне класе {јавни трг; публиц Цартоонист () {скуаре = нев Скуаре (); } публиц воид МастерДрав () {скуаре.Драв (); }} 

Као што ћете видети, ова класа "Драфтсман" у потпуности зависи од класе "Скуаре" будући да је она задужена за животни циклус квадратног објекта који ће касније користити. Овај начин стварања класе "Драфтсман" је врло непрактичан јер ако бисмо касније хтели да Драфтсман нацрта правоугаонике или троуглове, морали бисмо да измијенимо основни код да бисмо то учинили.
Уместо тога, можемо створити класу за вишекратну употребу ако имплементирамо интерфејс „Дравабле“ који смо креирали у претходном водичу:
 цртач јавне класе {публиц Дравабле дравинг; јавни цртач (Дравабле д) {цртеж = д; } публиц воид МастерДравинг () {дравинг.Дравинг (); }} 

На овај начин објекти класе "Драфтсман" не "контролишу" објекат који морају да нацртају, већ само знају да он имплементира Дравабле интерфејс и, касније, ове "Драфтсман" објекте које ћу креирати у својој апликацији или да ће неко елсе иде за употребу у апликацији која приступа мојој библиотеци објеката, они су савршено способни да приме сваки објекат који имплементира интерфејс "Дравабле".
У претходном примеру примењујемо оно што је познато "Инструкција конструктора" пошто се зависност убризгава на нивоу конструктора, али зависност можете убризгати и преко „Постављача“ или, у другим програмским језицима, можете убризгати параметре или интерфејсе (У Јави не можете да мењате параметре или интерфејсе који прихватају метод током извођења, али Питхон, на пример, дозвољава методама да прихвате параметре без навођења типа параметара.)
 цртач јавне класе {публиц Дравабле дравинг; публиц воид сетДравинг (Дравабле д) {цртеж = д; } публиц воид МастерДравинг () {дравинг.Дравинг (); }} 

Тхе убризгавање зависност у суштини омогућава раздвајање функционалности вашег програма. Та независност вам омогућава да тестирате часове без (вреди понављати) да ваш час буде везан за било шта. Ова независност је један од кључних делова које треба користити Пролеће, компоненте зависе од оквира, а не од апликације, можете креирати објекте који постоје изван ваше апликације и користити их само када вам затребају.
Од следећег водича почећемо директно са Спринг -ом и видећете како су сви концепти које смо до сада видели повезани са његовим радом и омогућиће вам да за кратко време стекнете неопходну стручност.
Чекам ваше коментаре, до следећег пута!Да ли вам се допао и помогао овај водич?Можете наградити аутора притиском на ово дугме да бисте му дали позитиван поен

Ви ће помоћи развој сајта, дељење страницу са пријатељима

wave wave wave wave wave