Хуткі старт Symfony DI (Dependency Injection) Падручнік
Што такое Dependency Injection (DI)?
Укладанне залежнасці з'яўляецца метад, які дазваляе слабосвязанных аб'ектаў у дадатку. Як правіла, калі аб'ект патрабуе доступу да функцыянальнасці іншага было б асобнік ўнутрана прыводзіць да моцна звязаных сістэм. Ажыццяўляючы ўкараненне залежнасці мы ўводзім неабходныя аб'екты гатовыя да выкарыстання (часам таксама завецца інверсіяй кантролю - МАК). Разгледзім наступны прыклад:
<? PHP твар, якое прымае рашэння класа { грамадскіх makeDecision функцыі (масіў $ параметраў) { / / Неабходна адаптара БД $ Др = новы DecisionParameters (); $ = $ ParameterScore інш-> getScore ($ параметраў); / * ... Яшчэ некалькі логікі прыняцця рашэнняў ... * / вяртання ($ parameterScore> 50); } }
Гэты фрагмент кода, як кажуць, цесна звязаны з аб'ектам DecisionParameters. Перапісваючы вышэй у слабосвязанных моды мы б нешта накшталт ....
<? PHP твар, якое прымае рашэння класа { прыватныя $ _dp; публічную функцыю __construct ($ інш) { $ Гэта-> _dp = $ інш; } грамадскіх makeDecision функцыі (масіў $ параметраў) { $ = $ ParameterScore гэтым-> _dp-> getScore ($ параметраў); / * ... Яшчэ некалькі логікі прыняцця рашэнняў ... * / вяртання ($ parameterScore> 50); } }
Хоць атрыманне пераваг слабосвязанных код, які мы дадаем такія складанасці, што кожны раз ствараецца асобнік аб'екта мы таксама павінны инстанцировать яго залежнасці і перадаць іх у занадта. Напрыклад, гэта:
$ = Выбар новых твар, якое прымае рашэння (); Рэха $ выбар-> makeDecision (масіў ('высілак' => 'нізкі', 'вяртанне' => 'высокі'));
Цяпер становіцца:
$ Др = новы DecisionParameters (); $ = Выбар новых твар, якое прымае рашэнні ($ інш); Рэха $ выбар-> makeDecision (масіў ('высілак' => 'нізкі', 'вяртанне' => 'высокі'));
Гэтая сітуацыя становіцца ўсё больш хваравітым, як лік залежнасцяў для класа павялічваецца, і што рабіць, калі залежнасцяў самі залежнасці? Гэта можа вельмі хутка стаць кашмарам аб'ект адміністрацыі! Калі ласка, увядзіце ўкараненне залежнасці кантэйнераў (або рамкі) ...
Працягнуць чытанне "Хуткі старт Symfony DI (Dependency Injection) Падручнік" »
















































