čo patrí a čo nepatrí do BasePresentera

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Čamo
Člen | 798
+
0
-

Zdravím vás,

chcel by som sa spýtať čo všetko podľa vás patrí do BasePresentera a čo tam naopak nemá čo hľadať.
Napr.

  • Injektovanie databázy
  • nejmspejsy
  • componenty

Napísal som si totiž komponentu pre menu a potrebujem ju dostať do všetkých presenterov čo už existujú. Doteraz bolo menu statické v layout.latte. Tak som rozmýšľal, že to menu dám rovno do BasePresentra. To menu samozrejme potrebuje pripojenie k DB, tak som rozmýšľal, či aj DB neinjektnúť do BP. Ešte netuším čo sa všetko môže stať. Poraďte mi prosím.
Ďakujem.

Matey
Člen | 142
+
0
-

patrí tam to čo vo väčšine ďalších presenterov potrebuješ, čiže áno aj databáza a niektoré komponenty
čo sa týka namespace tak ten s touto otázkou nemá nič spoločné, to si kus pomiešal jablká s hruškami :)

Čamo
Člen | 798
+
0
-

Matey
Díky, namespeces to je moja špecialita. Stále ich poriadne nechápem…

Šaman
Člen | 2666
+
+4
-

Databáze tam, při dobře navrženém modelu, nepatří. Já v něm mám například jen upravené metody pro vyhledání šablon. V AdminBasePresenteru mám kontrolu přihlášeného uživatele a případné přesměrování na login.

A bývaly doby, kdy jsem tam měl injectován $model aka service locator a univerzální komponenty (UserPanel, LogoutButton). Teď už však takovéhle věci v BasePresenteru nedoporučuji.

Azathoth
Člen | 495
+
0
-

namespace je něco, co by mělo být všude, ne?
@Čamo psal jsi někdy v javě? Pokud ano, tak namespace == package.

Čamo
Člen | 798
+
0
-

Šaman:
Ale modelu by sa mala DB predávať explicitne cez DI nie?

A čo si myslíš o takej komponente ako je menu v BP?
A prečo „také veci“ už nedoporučuješ?

PS: S tými namespacemi som to myslel tak, že či sa nededí to čo je v klauzule use(čo je ale zrejme blbosť)

Editoval Čamo (15. 11. 2014 0:04)

Šaman
Člen | 2666
+
0
-
  1. Ano, do modelu se Db dostane pomocí DI. Ale automaticky, nemusíš ji nijak předávat. Obecně by presenter neměl potřebovat něco jenom kvúli tomu, že to potřebuje nějaká jeho služba, nebo komponenta. Ti si to mají vyřídit s DI kontejnerem a ten pak presenteru předá už nakonfigurovanou službu, nebo instanci.
  2. Menu je stejný případ, jako ten UserPanel a LogoutButton. Pokud ho potřebují opravdu všechny poděděné presentery a jejich pohledy, tak je to v pořádku. Pokud je někdo chce a někdo ne, buď si udělej dílčí FooBasePresenter, nebo si to menu injectuj do každého presenteru. Já na to mám traitu, takže v každém presenteru dám jen use NS\TCreateMenuControl;.
  3. Ne, NS se nedědí. BasePresenter samozřejmě v nějakém NS je, ale to nemá vůbec vliv na ostatní, ani na problematiku injectování.
Čamo
Člen | 798
+
0
-

Šaman
Ja som to menu urobil tak, že sa mu predá DB a ono si samé vytiahne potrebnú tabuľku.
Je to zlý postup?? Malo by sa to menu spojiť s modelom od ktorého by dostalo tú tabuľku?
Ja som to myslel tak, že by to menu nebolo závislé na žiadnom modeli.

Azathoth
Člen | 495
+
0
-

pokud se nepletu, tak presenter by o databázi vůbec neměl vědět a všechno by měl dostávat z modelu, který do vytáhne z databáze, ale nevím přesně, jaké jsou tady best practises.

Šaman
Člen | 2666
+
0
-

@Čamo: Jestli nepoužíváš model, tak je předání $db do BasePresenteru podobné, jako injectování service locatoru $model. Předáváš ji natvrdo, i když teoreticky může existovat presenter, který ji nepotřebuje. Imho je lepší injectovat ji do každého konkrétního presenteru zvlášť. Ale to už je trochu filosofie.

Jinak samozřejmě lepší je model používat, ale než jsem na to přišel, taky jsem jel bez něho. Dá sa… (Pražákom). :)

Čamo
Člen | 798
+
0
-

Ok díky asi to prepíšem.