čo patrí a čo nepatrí do BasePresentera
- Čamo
- Člen | 798
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.
- Šaman
- Člen | 2666
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.
- Čamo
- Člen | 798
Š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
- 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.
- 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;
. - 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í.
- Šaman
- Člen | 2666
@Č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). :)