Properties – jak moc používat?
- Jiří Nápravník
- Člen | 710
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
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
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ší.
- Jiří Nápravník
- Člen | 710
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
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
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
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
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:
- IDE stejně nenapovídá
- atributů se tam vypisuje celá kupa, takže to práci fakt ušetří
- něco obdobnýho existuje i jinde a funguje to bez problémů (java – expression language)
- David Matějka
- Moderator | 6445
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.