Výjimky chovající se, jako by byly poděděné od Nette Object
- jantichy
- Člen | 24
Ahoj, už jsem mockrát narazil na to, že by se mi líbilo, kdyby všechny
výjimky měly stejně příjemné a jednotné chování, jako třídy odvozené
od Nette Object. Tedy zejména přístup přes properties ve smyslu
$e->message
a rozšířené možnosti reflexe.
Což v praxi samozřejmě nejde udělat tak, že by se podědily od Nette Object. Takže můj návrh je udělat jednu Nette Exception, která by byla předkem všech ostatních výjimek ve frameworku (a potažmo bych pak od ní rád odvozoval i všechny své ostatní výjimky), do které by se vepsala stejná volání a mapování do ObjectMixin, jako je teď v Nette Object.
Co si o tom myslíte?
A když už by se to dělalo, tak by se tomu mohla přidat nějaká další příjemná logika, například nějaké elegantnější nastavování defaultní zprávy a kódu v poděděných výjimkách apod.
- Honza Marek
- Člen | 1664
Nevim, za sebe to nepotřebuju. Většinou si vystačím s vyhozením a chycením výjimky a k tomu mi Nette výjimka nijak nepomůže.
Další problém je, že tak půlka výjimek používaných v Nette jsou standardní PHP výjimky. A tam to dodělat nejde. Takže by v tom byl pak bordel.
- Ondřej Mirtes
- Člen | 1536
Bože, co jsem to provedl? :o) Já ti tenhle šílený nápad neměl říkat :o)
Jsem pro, $e->message je sexy, nic tomu nebrání, Zend má taky svou obecnou Exception.
Nette používá nějakou výjimku přímo z PHP? Mám za to, že používá ty z exceptions.php a pak ještě některé s namespacem.
- Blizzy
- Člen | 149
Ondřej Mirtes napsal(a):
Nette používá nějakou výjimku přímo z PHP? Mám za to, že používá ty z exceptions.php a pak ještě některé s namespacem.
Myslím, že např. InvalidArgumentException
není z Nette, ale
z SPL. A tyto výjimky Nette používá hojně.
Editoval Blizzy (9. 8. 2010 0:26)
- David Grudl
- Nette Core | 8218
Z SPL se používá LogicException, InvalidArgumentException, RuntimeException, UnexpectedValueException.
Obecně nejsem proti, ale než do toho šáhnu, chtělo by to promyslet celkovou koncepci používání výjimek v Nette. Kdy použít low-level výjimky jako UnexpectedValueException, kdy zvolit vlastní výjimky atd. Protože tato úprava rozes**e veškerý existující kód a musí tedy k ní být pořádný důvod. Chcete se toho někdo ujmout a napsat RFC?
p.s. tohle téma skutečně založil člověk, který mi napsal „i po
několika měsících asistence u vývoje v Nette mi
přijde spousta věcí jako jedna velká zbytečně neprůhledná magie a jedno
velké WTF. … tenhle framework by měl mít možnost používat hned od
začátku, bez nutných znalostí úplně všech hlubokých mechanizmů
v něm.“ sorry, ale musel jsem si rýpnout Honzo!
- jantichy
- Člen | 24
Ahoj,
p.s. tohle téma skutečně založil člověk, který mi napsal „i po několika měsících asistence u vývoje v Nette mi
přijde spousta věcí jako jedna velká zbytečně neprůhledná magie a jedno velké WTF. … tenhle framework by měl mít možnost používat hned od začátku, bez nutných znalostí úplně všech hlubokých mechanizmů v něm.“
:)) Já si myslím, že to, co navrhuji výše, není žádná magie v tom smyslu, že pokud to někdo nebude chtít používat nebo si o tom zatím vůbec nic nepřečetl a ani neví, že něco takového rozšířené Nette výjimky umí, tak to vůbec ničemu nevadí, protože i nadále může vše používat přesně tak, jako doposud, bez sebemenší změny chování. Prostě je tu bezpečný standardní fallback pro nepoučené. Jenom to usnadní práci těm, kteří už o tom vědí a usnadnit si ji chtějí.
A to je přece úplně jiný případ, než když si u něčeho musím nejdřív nastudovat tuny podkladů a pochopit všechny aspekty a detaily do hloubky, abych vůbec mohl začít cokoliv používat.
- David Grudl
- Nette Core | 8218
Magie je to v okamžiku, kdy studuješ cizí kód, například příklad v distribuci, tutorial atd.