řešení – Seznam uživatelů na více místech
- Kamil Valenta
- Člen | 822
Pokud bys v php udělal soubor a includoval na více místech, stejně bys
do DB sahal vícekrát.
Pokud chceš vícekrát něco zobrazit (ve více presenterech), udělej si na to
komponentu s gridem a tu jen opakovaně vykreslíš.
Pokud ale chceš ušetřit sahání do DB, tak si datasource toho gridu zacachuj.
- martin_H
- Člen | 32
kamil_v napsal(a):
Pokud bys v php udělal soubor a includoval na více místech, stejně bys do DB sahal vícekrát.
Pokud chceš vícekrát něco zobrazit (ve více presenterech), udělej si na to komponentu s gridem a tu jen opakovaně vykreslíš.Pokud ale chceš ušetřit sahání do DB, tak si datasource toho gridu zacachuj.
ale tu komponentu pak musím znovu vytvářet v každém presenteru ne?
- Gappa
- Nette Blogger | 209
martin_H napsal(a):
kamil_v napsal(a):
Pokud bys v php udělal soubor a includoval na více místech, stejně bys do DB sahal vícekrát.
Pokud chceš vícekrát něco zobrazit (ve více presenterech), udělej si na to komponentu s gridem a tu jen opakovaně vykreslíš.Pokud ale chceš ušetřit sahání do DB, tak si datasource toho gridu zacachuj.
ale tu komponentu pak musím znovu vytvářet v každém presenteru ne?
Pokud máš nějaký BasePresenter
, pak metodu
createComponentUserList
můžeš mít jen tam.
- Šaman
- Člen | 2667
O co ti jde? Opravdu o snížení počtu dotazů do db? Většinou to nebývá problém, ale pokud opravdu chceš, pomůže jen cachování.
Jde ti o to nepsat stejný kód vícekrát? Napiš si třídu (která spadá do modelu) a případně i komponentu, která data rovnou zobrazí. Vícekrát pak budeš volat jen továrnu, která ti vrátí už připravenou komponentu.
Nastuduj si továrničky a DIC. Obojí má Nette pěkně vyřešené.
Editoval Šaman (24. 2. 2020 13:06)
- martin_H
- Člen | 32
Šaman napsal(a):
O co ti jde? Opravdu o snížení počtu dotazů do db? Většinou to nebývá problém, ale pokud opravdu chceš, pomůže jen cachování.
Jde ti o to nepsat stejny kód vícekrát? Napiš si třídu (která spadá do modelu) a případně i komponentum která data rovnou zobrazí. Vícekrát pak budeš volat jen továrnu, která ti vrátí už připravenou komponentu.
Nastuduj si továrničky a DIC. Obojí má Nette pěkně vyřešené.
o počet dotazů nejde, asi jsem to špatně popsal.
Nastuduji , to bude asi ono… Díky
- Šaman
- Člen | 2667
Tak v tom případě:
- Includování zařídí Nette (RobotLoader, nebo Composer Autoloader). Na pozadí stále includování probíhá.
- Uvažuj ale objektově. Nepíšeš script (soubor), píšeš třídu.
- Tu třídu si pak můžeš vytvořit kdekoliv.
- Můžeš použít
new UserModel($dbConnection);
, ale tento způsob má mnoho nevýhod. - DIC – Dependency Injection Container třídu vytvoři i s jejími závislostmi, třeba databází
- Takže je lepší si tu třídu zaregistrovat v configu (pak ji vytvoři a nakonfiguruje závislosti Nette na pozadí)
- A potom si ji jen vyžádat
Editoval Šaman (24. 2. 2020 13:25)