struktura dat, entit, modelů s doctrine

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

Zdravím, chtěl bych se zeptat, jak řešíte umístění logiky.

Obecně když jsem používal dibi, tak jsem měl vše v modelech. Nyní když používám doctrine a ta má své entity (budiž modely), tak mě zajímá, zda celou logiku strkat do těch entit nebo si vytvořit krom entit ještě modely a logiku mít v nich, či ještě třetí možnost mít ji v presenterech.

Proč se ptám? U entit jsou většinou settery a gettery jen dané entity a například když bych chtěl pracovat s více entitama najednou, nějak je propojovat (dql) tak pak si můžu hodit mincí do které z entit bych to přidal.

Díky za rady

Jan Endel
Člen | 1016
+
0
-

Doctrine ma takzvanou repository, ktery se stara o hromadnou praci s entitami, bud nad nim muzes mit facade, ve kterem muzes mit logiku nebo si repository podedit a kazde entite ten repository nastavit.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Dobré je zavřít oči a představit si „nic jako modely neexistuje“. Entita není „dejme tomu model“, je to prostě entita :). Pojem model označuje celou business logiku aplikace, které poskytuje API volané z presenterů (potažmo i z šablon, pokud je to efektivnější, vícelazy apod.).

Cokoliv složitějšího se vždycky vyplatí dát do nové třídy s dobrým jménem a jasně vymezeným účelem. Aplikace pak není tak sedrátovaná (jako když bys nacpal příliš mnoho logiky do entit), snazší k údržbě atd. Takové třídy zase nemá smysl nazývat „modely“ – spíš spolu s entitami jsou součástí Modelu (toho M z MPV zkratky). Ať takové třídy klidně dědí jen od Nette\Object… hlavní je, aby měly na zodpovědnost jen jednu věc (místo toho, aby ta věc byla na nějaké entitě).

Ještě doporučím článek http://www.zdrojak.cz/…-doctrine-2/.