21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
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
quatzael:
Moc nechápu, na co se ptáš. Uvedený kód nepoužívá dependency injection.
quatzael
Profil
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
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
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0