Upresneni MVC – nevim, jak ho spravne a efektivne aplikovat
- argoneus
- Člen | 14
Zdravim,
Dnes jsem zacal zkouset pouzivat Nette, ale mam s tim docela dost nejasnosti, zvlaste ohledne MVC paradigmatu.
Chapu, ze je tady nejaky model, sablona a presenter, teoreticky chapu, k cemu jsou, ale neumim prijit na to, jak to aplikovat.
Kdyz mam nejakou stranku, ktera je vicemene staticka (informace, kontakty a tak), ale je tam moznost registrace a nejake mini-forum, jak zhruba bude vypadat struktura, popr. co budou delat modely? Jestli to spravne chapu, tak budu mit model na ty casti, ktery pracujou s databazi, cili budu mit model na registrace/loginy a tak, a model pro to cely forum? Nebo jak by to bylo nejlepsi? To samy s presentarama/sablonama.. Moc se v tom nevyznam a i kdyz je dokumentace siroka, z vysvetleni jsem porad jen pochopil dany priklad, ale nepochopil jsem z toho, jak to aplikovat..
Predem dekuju za jakoukoliv pomoc!
- Šaman
- Člen | 2666
No, model je jen jeden a řeší veškerou funkčnost aplikace. Představ si, že by nějaká aplikace měla běhat nejen v prohlížeči, ale byla by funkční i přes telnet (z příkazové řádky). V tu chvíli máš model (kterému to je jedno) a dvakrát presenter+view vrstvu pro každé rozhraní. Model je tedy všechno, čemu nezáleží na interface. Komunikace s databází, řízení oprávnění, veškeré výpočty, entity, stavy a já nevím co ještě.
Presenter zajišťuje správné reakce na uživatelské vstupy (komunikuje s modelem) a zároveň dodává šablonám data z modelu (komunikuje s view).
View (do tohoto patří šablony a render* metody) zajišťuje správné zobrazení každé stránky. (V té telnetové aplikaci by bylo view minimální, ale jestli znáš nějakou starou hru typu MUD, tak si představ, že pohled skládá popis místnosti z dat, která od presenteru dostal z modelu. Tedy jestli nejdřív vypíše název lokace, pak popis, pak předměty, nebo nějak úplně jinak.)
No a pokud začínáš, tak buď jeď podle nějakého návodu, třeba QuickStart (pozor, jednotlivé repozitáře nejsou modely, i když se tomu tak často říká – tyto „modely“ patří všechny pod model, který je jen jeden).
Druhá možnost je zatím neřešit MVC/MCP a psát nehezky, bez modelu (já
tomu říkám VC aplikace). Tedy v presenterech máš veškerý kód a pomocí
šablon vykresluješ.
I při tomto způsobu psaní ti Nette hodně pomůže (robotLoader, config,
routování, laděnka, šablonovací systém, databázová vrstva) a časem
zjistíš, že to není pravé ořechové. Že bys něco raději zapsal do
samostatné třídy a používal na více místech.. V tu chvíli objevíš
model.
Já takto začínal – rok mi to vydrželo a oproti klasickému PHP to bylo
úplně jiné kafe. Pak jsem objevil model. Pak jsem zjistil, proč nepoužívat
statické třídy. Pak jsem zjistil, proč nedělat příliš chytré
komponenty. Pak jsem objevil DI. Třeba časem začnu i testovat :)
- argoneus
- Člen | 14
Takze jestli to spravne chapu, tak kdyz nactu nejakou stranku, tak prohlizec rekne Presenteru, co by chtel videt, Presenter si od modelu sezene to, co uzivatel hleda, a tohle vsechno posle do Viewu, kterej to zpatky posle prohlizeci jako stranku?
V tom pripade, kdyz mam nejakou statickou stranku, kde je jen nemenny text, tak ten s modelem nema vubec nic spolecneho a ma ho na starosti jen presenter? Nebo se i tady da nejak aplikovat model?
- Šaman
- Člen | 2666
No, pokud je to zcela statický text, tak je spíš v šabloně a presenter
ti jen zařídí načtení správné stránky. Ale tak se to nedělá –
k čemu PHP, když chceš statickou stránku? Na to je HTML.
Dělá se to tak, že texty jsou v databázi a aplikace je načte a správně
zobrazí. V minimální podobě nastuduj micro-blog v příkladech
v distribučním baličku, ve velkém to dělá WordPress, Joomla apod. Tyto
velké redakční systémy ale nejedou na Nette.
- Šaman
- Člen | 2666
Spíš napiš na jaký web to chceš. Pokud něco typu blog, web s novinkama
a podobné, které nejsou úplně statické (přibývají články/stránky),
nebo skutečně statický web ála prezentace.
Na to první se Nette použít dá, na to druhé je to zbytečné a existují
efektivnější nástroje (protože z Nette nic nevyužiješ).
- argoneus
- Člen | 14
No je to prevazne staticky web, jenom tam chci pridelat vlastni forum, na coz mi Nette prijde vhodne..
EDIT: Ale neco jako mini-blog by to take mohlo byt, s obcasnymi „novinkami“ apod., jen tam stejne budou ciste staticke stranky, ktere nevim, jak do toho zakomponovat
Editoval argoneus (29. 5. 2013 12:51)
- Šaman
- Člen | 2666
@mkoubik, @ViPEr*CZ*: Jestli si chce sám
dělat statický web, tak budiž.
Ale jestli to po něm chce zaměstnavatel, tak ho požene svinským krokem, až
zjistí, že pro každou drobnost bude muset volat (a platit) programátora. Do
redakčního systému umí přispívat i zaučená sekretářka, v lepším
případě copywriter.
Editoval Šaman (29. 5. 2013 22:22)
- Šaman
- Člen | 2666
Jj, to je nejlepší řešení. Můžeš použít třeba Texy, nebo jiný
formátovač textu, nebo nějaký WYSIWYG editor, který se bude sekretářce
obsluhovat nejlépe.
Data z databáze pak načteš a jen vložíš do šablony.
Jen budeš potřebovat upravený router, myslím, že načítání rout
z databáze se řešilo na lednové posoboté 2012.