Odpovídáte na názor ke článku Dependency Injection ještě jednou :-).
No ja na opensource veru cas nemam. Takze Kostislav, nazrel som akurat do toho PHP repa. Takyto kod by cez code review vo firme s pricetnymi kolegami nepresiel. Nehovorim ani tak o komentaroch, i ked je lepsie vediet z komentaru co ta metoda robi, ako lustit spagetak. Ale chapem, popisat spagetak v metode do komentaru je niekedy nadludsky vykon. To ze jedna metoda by mala zastresovat jednu funkcionalitu by mal respektovat aj junior. Ktomu prechadzaniu pola cez foreach, mozno dobry napad v jave, php si ale v tomto pripade nad tym polom vytvara iterator. Preto je foreach dobry pre metody s yield, Reflection::getMethods vracia pole, tam by som pouzil array_walk. Toto ale nevedia zvedsa ani mediori, preto leju foreach vsade.
K odovzdavaniu zavislosti cez konstruktor. Preco by mali byt zavislosti posielane objektu cez konstruktor. Aby sme sa tomu vyhli (parameter passing) tak mame prave dependency injection. Naviac pri tomto postupe je nutne aby vsetky zavislosti boli este pred zavolanim konstruktoru v pamati inicializovane. Aj tie ktore nebudu pouzite. To ma negativny dopad nielen na vykon ako taky, ale aj na odozvu. Vacsina ludi opusti web ak nedostane odozvu do cca 10 sec. Google stranky s dlhou odozvou penalizuje este prisnejsie. To ze web odrati pomalostou urcite percento ludi vedenie ako tak prekusne, ale prepad vo vysledkoch vyhladavania ich rozladi zarucene.
Ako ich predavam ja? Nemusim mat globalny singleton, trieda ktora splna interface Configurable, ma konstruktor s jedinym parametrom - $configContext, ktory obsahuje parametre zavislosti a na poziadanie ich instancuje v pamati. Ked si to prezenies cez profiler (ak ti teda cachegrind nerobi problem) tak zistis ze je tam dost drasticky rozdiel.
Přečteno 20 343×
Přečteno 18 186×
Přečteno 17 605×
Přečteno 17 192×
Přečteno 15 826×