Volání metody jiného presenteru a statická metoda

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
TomasHalasz
Bronze Partner | 79
+
0
-

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 | 8172
+
+3
-

Zodpověděl sis spravně. Manipulace se skladem je přece úkolem datového modelu, nikoliv presenteru nebo třeba šablon.

F.Vesely
Člen | 368
+
+1
-

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
+
0
-

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
+
0
-

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 | 368
+
0
-

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
+
0
-

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?