Jak navrhnout strukturu aplikace? Z ukazek nejsem prilis moudry :(

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

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

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

xzajic: diky za odpoved – to je prave to, priklady sem prosel, a sem spise zmateny. ano – model – reprezentace entit z databaze, jenze:

  1. v prikladech je trida „Users“ a ne „User“ – entita je „User“, ale modelova trida je spise takovy „User Manager“
  2. 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
  3. 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)