Upresneni MVC – nevim, jak ho spravne a efektivne aplikovat

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

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

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

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

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.

norbe
Backer | 405
+
0
-

Použití PHP na statické stránky má rozhodně své opodstatnění. Konkrétně třeba možnost použití layoutu, automatickou minifikaci css/js a určitě by se našli i další výhody, takže bych to úplně nezavrhoval.

argoneus
Člen | 14
+
0
-

Cili i napr. Kontakty jsou ulozeny v databazi jako kazda jina stranka, jenom si nic jinyho netahaj z db?

Editoval argoneus (29. 5. 2013 11:50)

Šaman
Člen | 2666
+
0
-

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

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)

mkoubik
Člen | 728
+
0
-

@Šaman: myslím, že minimálně routování a latte využiješ i na statickém webu.

ViPEr*CZ*
Člen | 817
+
0
-

No minimálně latte na statickém webu bude super, header, footer mnohdy bývá stejný a když mám 30 statických *.html souborů a je potřeba změnit něco v patičce je to opruz :-)

argoneus
Člen | 14
+
0
-

Je tedy dobra volba to udelat tak, ze misto toho, aby presenter nejdriv data shanel, tak rovnou uzivateli posle nejakej template, ve kterym uz jsou ty data pevne dany? Resp. resi se takhle staticke stranky?

Šaman
Člen | 2666
+
0
-

@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)

argoneus
Člen | 14
+
0
-

Co tedy udelat kompromis – data statickych stranek budou v DB jako vsechny ostatni? Tim padem by se dal udelat nejaky snadny RS na upravu, ne?

Editoval argoneus (29. 5. 2013 22:44)

Šaman
Člen | 2666
+
0
-

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.