Diskuze: Dependency Injection - způsob
Člen
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Předávat závislost konstruktorem je sice fajn, ale má to dvě nevýhody
Běžně používám anotace a nikdy jsem s tím problém neměl. Často pak mám třeba
class Presenter
{
/**
* @var Model\User
* @inject
*/
public $userModel;
/**
* @var Model\Article
* @inject
*/
public $articleModel;
/**
* @var Model\Message
* @inject
*/
public $messageModel;
/**
* @var Forms\SendMessageFormFactory
* @inject
*/
public $sendMessageFormFactory;
// atd.
}
Ja ti naopak DI cez inject neodporúčam ... Jediná jeho výhoda oproti konštruktoru je to že menej píšeš ... Osobne som sa o túto problematiku zaujímal pár dni do zadu a zistil som že je to čisto na programátorovi David Grundl na jeho prednáškach odporúča Inject ale tiež uviedol ako jediný dôvod menej písania ale zas na druhú stranu písal som si s mnohými programátormi ktorý mi povedali že je lepšie používať konštruktor prečo ?
Budem citovať jedného z nich teda člena IT Tuníka
Typová kontrola a jasná specifikace existenčních závislostí.
Předávání závislostí pomocí konstruktoru je dostupné u všech vytvářených tříd, podobně pak použití setteru u nepovinných závislostí. Další techniky, tedy metody inject* a členské proměnné označené anotací @inject, jsou pak méně čisté techniky a jsou dostupné jen v presenterech, případně je možné je vynutit konfigurací u služeb vytvářených DI Containerem. Používáme je tedy pouze ve specifických případech, například u již zmíněných presenterů.
Jak budeš řešit případ, kdy:
ta čísla jsou tam náhodně, ale proto, aby vyjádřila větší počet těch závislostí. Jak to budeš řešit konstruktorem? Zvlášť u bodu c), kdy kvůli přidání jedné nové závislosti do BasePresenteru budeš muset upravovat všech zbylých deset presenterů, aby tu závislost jejich předkovi předaly.
Schválně jsem si propočítal, kolik takových závislostí mám v jedné aplikaci. BasePresenter jich má 13 a jeden větší presenter pod ním dalších 7. Tohle řešit konstruktorem, tak umřu
Zobrazeno 5 zpráv z 5.