Jak správně používat jinou knihovnu v prezenteru
- jean_cz
- Člen | 12
Mejme classu (která dědí z Nette\Object) a tato třída ke své činosti potřebuje několik modelů. V rámci zachování DI si tyto modely předáme v konstruktoru.
Jak ale tuto třídu volat z prezenteru:
- vytvořit instanci a té předat potřebné modely?
- Zaregistrovat tuto třídu jako servisu/továrničku v konfigu
Nebo úplně jiné řešení?
Díky za radu.
- enumag
- Člen | 2118
Vytváří se pouze pokud je nějaká jiná služba (případně presenter) vyžaduje v konstruktoru nebo inject* metodě. V tomto ohledu to tedy je lazy, ale…
…úplně lazy to však taky není. To že XXX má závislost na YYY znamená, že YYY potřebovat může, ale nikoli že to opravdu použije, typicky do presenteru injectuješ více služeb, ale některé jsou třeba jen při jedné konrétní akci a jindy se tato služba vytvářela zbytečně. V presenterech to lze řešit takto.
EDIT: Mimochodem v debugbaru je panel ve kterém jasně uvidíš všechny služby co jsou v DIC registrované a které z nich se při daném požadavku opravdu vytvořily.
Editoval enumag (11. 2. 2013 14:18)
- Filip Procházka
- Moderator | 4668
Registrace jako služba je rozhodně nejlepší volba.
Můžeš zkusit použít tohle, aby to bylo pořádně lazy :)
- jean_cz
- Člen | 12
postoupil jsem trochu dál, ale radši se zeptám, jestli nejsem úplně mimo…
- Mám model
- Mám třídu s logikou, která je závislá na modelu
- Mám prezenter (nebo i více prezenterů), které jsou zavislé na modelu a také na tříde
Přemýšlím špatně, když si ve třídě zvyditelním model do prezenteru injectuju pouze onu třídu? Použití třídy v prezenteru by pak bylo:
<?php
$this->class->udelejneco(); // udelejneco je metoda tridy
$this->class->model->getTable(); // data z modelu prostrednictvim tridy
?>
- enumag
- Člen | 2118
@Majkl578: Naprosto žádnou, reagoval jsem na @vvoodyho příspěvek. že z presenterů by se neměly stávat multifunkční obludy. Btw. těmi dekorátory jsi myslel co? Pattern jsem si našel, ale nějak nevím jak bych to udělal v PHP – leda traitou.
@jean_cz: Ta třída už je vlastně facade. Imho by Presenter měl pracovat pouze s touto třídou, která by případně měla obsahovat proxy metody na ten model, tj. myslím že by Presenter na model neměl sahat přímo.
Editoval enumag (12. 2. 2013 11:50)
- redhead
- Člen | 1313
enumag napsal(a):
Btw. těmi dekorátory jsi myslel co? Pattern jsem si našel, ale nějak nevím jak bych to udělal v PHP – leda traitou.
Já spíš nechápu souvislost dekorátoru a lazy inicializace. Pokud s nemýlím, k tomu slouží proxy, což je také svým způsobem dekorátor (resp. používá se stejně), ale oba mají naprosto jiný účel.
Editoval redhead (12. 2. 2013 13:45)