Volání metody jiného presenteru a statická metoda
- TomasHalasz
- Bronze Partner | 79
Ahoj všem,
chtěl jsem poprosit o radu. Mám presenter, který se stará o příjem a výdej ze skladu. Metodu, která provádí aktualizaci počtů kusů na konkrétní zásobě bych rád volal z jiného presenteru, který má na starosti vytvoření faktury.
Nette mi při volání public metody presenteru z jiného presenteru říká, že by volaná metoda měla být statická. Když ji však deklaruji jako statickou tak v ní zase (logicky) nemůžu použít $this, které potřebuji pro volání injektovaných datových modelů
Zatím jsem to vyřešil tak, že v parametru do statické metody předávám z volajícího presenteru i $this. Ve volajícím presenteru pak akorát musím dát pozor na to aby tam byly injectované všechny datové modely, které používá statická metoda cizího presenteru. Jen mám pocit, že toto není moc správné řešení. Existuje nějaká lepší možnost? Přesunout tu static metodu do datového modelu?
díky moc za rady
- David Grudl
- Nette Core | 8258
Zodpověděl sis spravně. Manipulace se skladem je přece úkolem datového modelu, nikoliv presenteru nebo třeba šablon.
- F.Vesely
- Člen | 369
Vsechna tahle aplikacni logika (ukladani/mazani z databaze, ukladani/mazani souboru, odesilani emailu, atd.) by mela byt v modelu jako services. Presenter by ses mel snazit delat co nejtenci, idelne aby v akci/handle zavolal metodu service tridy, pak jen hodil hlasku do flash messages a presmeroval.
Rozhodne nikdy nevolej z jednoho presenteru akci jineho presenteru a uz
vubec nepredavej do staticke metody jine tridy $this
jen abys tam
mel nejake zavislosti.
- TomasHalasz
- Bronze Partner | 79
David Grudl napsal(a):
Zodpověděl sis spravně. Manipulace se skladem je přece úkolem datového modelu, nikoliv presenteru nebo třeba šablon.
Děkuji, rozumím.
- TomasHalasz
- Bronze Partner | 79
F.Vesely napsal(a):
Vsechna tahle aplikacni logika (ukladani/mazani z databaze, ukladani/mazani souboru, odesilani emailu, atd.) by mela byt v modelu jako services. Presenter by ses mel snazit delat co nejtenci, idelne aby v akci/handle zavolal metodu service tridy, pak jen hodil hlasku do flash messages a presmeroval.
Rozhodne nikdy nevolej z jednoho presenteru akci jineho presenteru a uz vubec nepredavej do staticke metody jine tridy
$this
jen abys tam mel nejake zavislosti.
Aha, děkuji. Já měl za to, že v modelu mají být jen práce spojené s databází aby při změně databáze stačilo vyměnit model. Píšeš, že i např. ukládání a mazání souborů, odesílání emailů by mělo být v modelu. Myslíš to tak, že pro tyto akce (práce se soubory, emaily) bych měl mít zvlášť službu (model) a to i v případě, že danou funkci potřebuju z presenteru volat jen jednou a vím že ji odjinud volat nebudu?
- F.Vesely
- Člen | 369
Ano. Jednak pak neni Presenter tzv. God Object, lepe se to testuje, kdyz pak chces posilat emaily jinde, tak jen zavolas tuhle service a on uz se postara o vytvoreni Message a poslani, atd.
Je potreba k tomuhle vsemu nejak dojit. Budto pujdes na nejaky kurz, nebo si tim projdes sam a budes procitat forum, Twitter, ruzne clanky a nekolikrat se spalis. Ja jdu treba tou druhou cestou, stale neco vylepsuji v kazdem novem projektu a strasne me to bavi. :)
- TomasHalasz
- Bronze Partner | 79
Já jsem taky spíše samouk :-) A nevěděl bys o nějakém zdroji, kde by takovéto best practices byly popsány?