Properties – jak moc používat?

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

Možná trochu blbá otázka, ale vrtá mi to hlavou.

Přešel jsem z jiného frameworku a tak jsem byl zvyklý si psát gettery a settery. Záhy jsem samozřejmě používal v šablonách properties. No a postupně se mi občas nechce psát a tak je používám čím dál více – presentery, komponenty, v modelu se zatím snažím psát hezky gettery.

Ale pořád mi nějak vrtá hlavou, zda je to správné a nezačínám jich až nadužívat. Jaká je best practise, kdy používat kdy ne?

Šaman
Člen | 2666
+
0
-

Co myslíš těmi property? Public property jsou špatné a tolerovatelné jen v presenterech, když používáš anotaci @inject. (Proč v presenterech ano je na delší úvahu, jinde ne protože to porušuje zapouzdření.)

Jestli ale tím property myslíš to, že např. v komponentě $this->presenter->… zavolá $this->getPresenter()->…, tak s tím jsem zatím problém neměl. Jediný problém je v tom, že už občas sám nevím, co je pravá property a co je jen magicky volaný getter. Ale ideálně by se měla používat jen v šablonách. (Vlastně měl jsem s tím drobný problém – tak jsem si na to zvykl, že jsem se to snažil psát i u tříd, které nedědí od Nette\Object a tedy tuto fičuru neznají a hází laděnku.)

Jiří Nápravník
Člen | 710
+
0
-

Public metody ne, ty vůbec nepoužívám – dokonce už ani v presenterech, protože jsem přešel na Kdyby\Autowired, které umožnuje i protected. A public mám jen pro persistentní parametry.

Jinak myslím tako klasícký, co je v Nette\Object. Že mám objekt, v ní mám getXX, setXX a pak s tím pracuji jen jako $obj->xxx. V latte s tím problém nemám, tam mi to přijde rozumné. Do modelových tříd, tam je chci mít čisté a tam si píšu getXX, ale presentery, komponenty, tam si někdy rád „ujedu“, je holt rychlejší třeba vytáhnutí identity jako $this->user->identity než psát $this->getUser()->getIdentity(). Nevím prostě, kde je ta ideální hranice a jak to řešíte vy zkušenější.

Aurielle
Člen | 1281
+
0
-

Nevidím důvod je nepoužít, pokud nebude kód číst někdo, kdo nebude chápat, jak fungují. Důležitější je dodržet jednotnost napříč celým projektem.

Settery mají možná oproti property přístupu jedinou výhodu a to, že je lze volat fluent způsobem, pokud jsou tak napsány.

Jiří Nápravník
Člen | 710
+
0
-

Jsem z toh oprávě torchu zmatený, když dám ve zdrojáku nette vyheldat ->get, tak mi jich to najde spoustu a vypadá to, že používá jen ty a properties jako takové nikoli.

Když se kouknu třeba na quickstart, tak jednou je tam použitá property, jednou getter. Třeba tady $form->values a pak $this->getUser(). Konkrétně u usera mi přijde, že je to často jak se chce a vídám $this->user->getIdentity()

Šaman
Člen | 2666
+
0
-

Framework je nepoužívá, ale myslím, že je to jen kvůli akademické čistotě, než že by s nimi byly problémy. A ještě na jednu věc jsem si vzpomněl – NetBeans při poklikání na getter přejdou na jeho zdroják, s falešnou property si ale neporadí. Takže je dobře, že jádro používá gettery, lépe se to ladí.

Jiří Nápravník
Člen | 710
+
0
-

JJ, to že si s tím netbeans neporadí (resp.p poradí, jen když použiju phpdoc) je nevýhoda. No vidím to tak, že v modelových třídách budu stále „čistý“ a jinde si občas „ujedu“:-)

Michal Vyšinský
Člen | 608
+
0
-

Osobně používám radši gettery a settery, když už to nelze rozumně zapouzdřit. Ve výsledném kódu je pak lépe vidět, že se používá nějaká metoda a že to není jen nějaká public property.

Edit: properties používám většinou jen v šablonách, jelikož tam je to hezčí a IDE stejně v šabloně nenapovídá.

Editoval Michal Vyšinský (24. 3. 2014 14:21)

Tomáš Kolinger
Člen | 136
+
0
-

V kódu určitě používat settery a gettery. IDE napovídá a je to fajn. Psát anotace pro properties je větší ztráta času, než psát gettery/settery.

V latte bych byl spíš pro properties:

  1. IDE stejně nenapovídá
  2. atributů se tam vypisuje celá kupa, takže to práci fakt ušetří
  3. něco obdobnýho existuje i jinde a funguje to bez problémů (java – expression language)
David Matějka
Moderator | 6445
+
0
-

magicke properties pouzivam vetsinou jen v sablonach a presenterech – ale nemam zadne pravidlo, obcas to micham. Do phpstormu muzete pouzit uzitecny plugin, ktery si s magickymi properties poradi.