Autor | Zpráva | ||
---|---|---|---|
quatzael Profil |
Jde mi o to zjistit do jaké míry je toto obvyklé, jestli se to dělá běžně nebo je to zase považováno za programátorskou prasárničku..
Jaký je prosím na tohle váš názor? Příklad: class Class_A { public function doSomething() { echo "What?"; } } class Class_B { public function doSomethingElse() { $obj_a = new Class_A; $obj_a->doSomething(); } } $obj_b = new Class_B; $obj_b->doSomethingElse(); |
||
Jan Tvrdík Profil |
#2 · Zasláno: 25. 10. 2015, 17:11:22
quatzael:
Moc nechápu, na co se ptáš. Uvedený kód nepoužívá dependency injection. |
||
quatzael Profil |
#3 · Zasláno: 25. 10. 2015, 21:19:46
Jan Tvrdík:
No snažím se zeptat, jestli je možné takto psát kód jak jsem to uvedl a jestli se to tak dělá.. Ten článek o dependency injection jsem si přečetl, ale nepochopil jsem o jak moc se všechno ulehčí. Když jde o ukládání do databáze a metoda potřebuje pracovat pouze s jedním objektem, tak chápu, že to takhle může být flexibilnější pro další změny, ale co když ta metoda bude mnohem složitější a bude pracovat s větším množstvím externích objektů? Přece nemá smysl všechny vkládat jako parametr.. |
||
juriad Profil |
#4 · Zasláno: 25. 10. 2015, 21:34:03
quatzael:
To co jsi napsal v [#1] je správně. V určitých situacích. Samozřejmě, že můžeš v metodě vytvořit instanci, použít ji a na závěr ji zahodit (přikladem může být třida DateTime, kterou můžeš používat pro pohodnou práci s datumy). Není přiliš obvyklé, že bys vytvořil instanci třídy bez parametrů, a pak na ní zavolal jedinkrát metodu opět bez parametrů a zahodil její návratovou hodnotu. Ale to je doufám jen zjednodušení. Nenapsal jsi, k čemu to má bý dobré. To, co uvádí Jan Tvrdík se týká způsobu, jak uvnitř projektu instancím předat referenci na různé služby na místo nějakého statického registru nebo jejich opakované konstrukce. |
||
Alphard Profil |
#5 · Zasláno: 25. 10. 2015, 21:34:39
Z takto obecného kódu [#1] podle mě nelze usoudit, že by měl používat DI. Celé je to o tom, jestli má smysl instanci třídy Class_A předávat externě jako závislost.
Přímo k dotazu bych řekl, že na tom není vůbec nic špatného. Konstruovat a využívat objekty v metodách jiných objektů je běžné. Jedinou poznámku mám ke coding standard, ta podtržítka se mi v PHP nelíbí :-) |
||
quatzael Profil |
#6 · Zasláno: 25. 10. 2015, 21:47:19
juriad:
„Ale to je doufám jen zjednodušení.“ No samozřejmě:o) Alphard: „Jedinou poznámku mám ke coding standard, ta podtržítka se mi v PHP nelíbí :-)“ A jak se to teda řeší? Zase velbloudem jako v js? Článek uvedený v [#2] se na začátku tváří, že se snaží vysvětlit , že se má používat DI, proto, aby bylo zřejmé ze samotného pohledu na kód co se v odpovídajících třídách děje. To se mi ale moc nezdá, že by to zrovna tohle řešilo.. |
||
Alphard Profil |
#7 · Zasláno: 25. 10. 2015, 22:22:51
quatzael:
„A jak se to teda řeší? Zase velbloudem“ Alespoň u tříd je to zvykem. PSR-1 samozřejmě není dogma, ale _ v názvech tříd byly v dobách bez namespace používány k naznačení jmenných prostorů, takže to může být matoucí.
„(...) se má používat DI, proto, aby bylo zřejmé ze samotného pohledu na kód co se v odpovídajících třídách děje“ Přesně tak, ale nejen kvůli tomu. Nějaký modul může požadovat např. službu pro uložení nacachovaných dat. Nevyžaduje žádnou konkrétní, stačí mu splnění nějaké interface, např ICacheStorage a externě lze na základě konfigurace vkládat různé služby.
„To se mi ale moc nezdá, že by to zrovna tohle řešilo“ Ono to řeší, ale je třeba používat to pro smysluplné třídy/služby. Samozřejmě ne pro každou třídu, která je v kódu použita. |
||
Časová prodleva: 7 let
|
0