Jak navrhnout strukturu aplikace? Z ukazek nejsem prilis moudry :(
- wdolek
- Člen | 331
zdravim vsechny Nettare (?) :)
resim velike dilema. jiz jsem se v jinem threadu dozvedel, ze spojeni s databazi lze efektivne vyresit v tride modelu – nadefinovat atribut staticky, do nej ulozit instanci pripojeni k db – pak bude mit kazda trida modelu pristup k databazi.
jeden z poznatku bych tedy mel. ale co dal? vubec nerozumim samotnemu rozdeleni aplikace – MVC/MVP. z programovani v .NETu jsem si odnesl zvyk:
- bussines logiku delat co nejuniverzalneji (napriklad jako snusku trid v .dll), aby se program dal jednoduse prenaset
- controller obsahuje jen velice jednoduche konstrukce – volani metod v bussines logice
z toho tedy pro mne vzdy vyplynulo, ze ma „bussines“ logika obsahuje nejake zakladni objekty (dalo by se rict ze modelove) a dale objekty, ktere s temi modelovymi nejak dale pracuji – precejen u slozite aplikace si nevystacim s tim, ze mam snusku objektu, ktere reprezentuji nejaka data, a na nich par metod select-insert-delete.
nyni se dostavam k Nette… vidim zde presentery (controllery), modelove tridy a library. a jsem z toho cely tumpachovy – nedokazi si vytvorit jasnou predstavu o strukture aplikace.
uvazuji zatim tak, ze nejakou svou aplikaci bych vytlacil timto zpusobem:
(budu uvazovat treba tvorbu nejake obrazkove galerie…)
- bussines logiku bych ulozil do trid do knihovny – tedy zakladni objekty galerie, kategorie, obrazky a kdo vi co jeste (u fora treba cele forum, thread, zprava…)
- modelove tridy by pak byly defacto jen zapouzdrene objekty z knihovny – zde ale vidim problem v mem napadu :P nejak to do toho konceptu nezapada
- presenter by pote jednoduse pracoval bud s modelovymi tridami nebo s bussines logikou z knihovny
sam vidim, ze to neni uplne koser. vubec pak nevim, kam bych do toho nasadil treba uzivatele, role, praci se session, databazi (nebo vice db spojeni pro jednu aplikaci) a mnoho dalsich soucasti frameworku.
asi jsem natvrdly – ale z dokumentace, prednasek ani z pekneho serialu na rootu mi to proste nedochazi. a tak :) se obracim na Vas, zkusenejsi – a jako hloupy trkam kolem.
predem diky za kazdy postreh, napad. mozna by mi pomohly i zdrojaky k nejake kompletni aplikaci – abych si udelal jeste vetsi prehled.
- xzajic
- Člen | 19
Ono by mělo stačit projít příklady. Akrabat.Forms mají jak rozdělení na MVC (resp. MVP), tak i jakési přihlašování. S NETTE pracuji pár dnů a dá se to pochopit. MODEL je v podstatě buď žádný, nebo jakýsi objektový obraz databázových entit. Představte si jej jako LINQ to SQL vygenerované classes v .NET. Pak je zde View – jež má za úkol data zobrazit, tedy je to o „šablonách“, (v .NET by to byly třeba WinForms) a nakonec PRESENTER, což je nejdůležitější část. PRESENTER má za úkol nacucat data z modelu a předat je pohledu.
Alespoň takhle jsem to pochopil, snad mě tady nějaký guru nezabije za přílišné zjednodušení věci.
- wdolek
- Člen | 331
xzajic: diky za odpoved – to je prave to, priklady sem prosel, a sem spise zmateny. ano – model – reprezentace entit z databaze, jenze:
- v prikladech je trida „Users“ a ne „User“ – entita je „User“, ale modelova trida je spise takovy „User Manager“
- findall a jine funkce vraci dibi resulty, a ne modelovy objekt „User“ (ktery ani nikde neni definovany) – jasne, je to jednoduchy priklad, a mozna to ani neni za potrebi, ale pro uplnost ;) bych to tam uvital
- ne vzdy lze vsechno co je v db pohodlne vyjadrit co tabulka = modelova trida – uz sem delal na tak zmatenych projektech, kde v pripade, ze bych se ridil timto pravidlem, vznikne mi treba 20 naprosto nesmyslnych trid (pro spojove tabulky treba mezi tremi entitami) – s kterymi se pak prilis dobre nepracuje – a hlavne – na jake urovni s nimi pracovat? v presenteru? nebo mit nejakou dalsi pridavnou modelovou tridu a v te vse delat?
tedy… jasne – pro nejake uzivatele, obrazek, galerii – modelova trida. chapu. ale pak musi byt nejaka slozitejsi bussines logika, ktera hlida uz nejake featury (treba pocet obrazku v galerii, nejake jejich vlastnosti, nalinkovani na uzivatele a podobne) – a ne vse lze opet udelat na strane db.
v Akrabat.Forms mi taktez chybi nejake prirazeni prav uzivateli, role – z dokumentace, ktera je sice pekne napsana, sem ale stejne prilis nepochopil, jak tuto vec zasadit do sveho programu. opet se ptam – mam takoveto veci resit v presenteru? v modelu? v nejake bussines logice? v bootstrapu?
jiste – s Nette si to mohu nabastlit kam se mi zrovna zalibi – ale kdyz uz tedy neco delam, rad bych to udelal „spravne“ podle nejakych konvenci – aby pripadny nasledovnik nemusel cist vsecky zdrojaky a vytrhavat si vlasy, jak to pred nim nekdo zvlastne poskladal :)
Editoval wdolek (27. 6. 2009 22:27)