Doctrine chytřejší entity

Martk
Člen | 655
+
0
-

Mám například entitu Novinky

class News {

	protected $title;

	protected $content;

}

a potřebují, aby někdy nesla informaci o tom jestli je okomentovaná od přihlášeného uživatele a počet komentářů.

Mám k tomu 2 (DetailComponent, GridComponent) komponenty, DetailComponent je vykreslení právě jedné novinky. GridComponent je vykreslení gridu novinek (více komentářů pod sebou, takže používá komponentu DetailComponent) + stránkování apod.

U tohoto nastály problémy:

  1. Když budu žádat počet/okomentování v DetailComponent, tak jakmile použiju GridComponent a tam předám News[10], tak budu mít najednou 10 dotazů místo 1.
  2. Když předám DetailComponentu přes konstruktor informace o počtu/okomentování přes GridComponent a to samé i v jiných místech, kde potřebuji DetailComponentu, tak při změně budu muset opravovat kód na mnoha místech.
  3. Vytvořit ondemand decorátory entit/iteratorů. Budou obsahovat metody isCommented, getCommentCount. Možná nevýhoda: budou se v aplikaci plést entity / chytřejší entity.

Jak to řešíte vy nebo je špatný návrh komponent?

Kamil Valenta
Člen | 762
+
+1
-

Komponenta se má starat o „znovu-vykreslitelný kód“, data by měl dodat model. Pokud tedy budeš vykreslovat grid, model dodá všechny potřebné záznamy (jedním dotazem), pokud budeš vykreslovat detail, model dodá 1 záznam (zase jedním dotazem). Komponentě může být celkem šumák, kde se data vzala.

Martk
Člen | 655
+
0
-

@kamil_v Děkuji za odpověď, sice to není to pravé, co jsem chtěl :) ale když už jsi mi odpověděl, tak mám doplňující dotaz. Je v pohodě, když v komponentě volám z modelu metody nebo to by měl vždy dodat presenter?

Gappa
Nette Blogger | 199
+
0
-

Martk napsal(a):

@kamil_v Děkuji za odpověď, sice to není to pravé, co jsem chtěl :) ale když už jsi mi odpověděl, tak mám doplňující dotaz. Je v pohodě, když v komponentě volám z modelu metody nebo to by měl vždy dodat presenter?

Vždy presenter – to by byl problém v případě zanořených komponent :)

Záleží asi na konkrétních případech – pokud jsou data závislá na parametrech a podle nich se mění, tak je lepší, když je dostane od rodiče, pokud jsou neměnná, pak je jednodušší, když je to celé zapouzdřené uvnitř komponenty.

Alespoň tak to mi to dává smysl.