Vyhozené výjimky ve flash zprávičkách?
- akadlec
- Člen | 1326
Jen rychlý dotaz, je korektní vyhozenou výjimku použít v zobrazené flash zprávičce?
Příklad: Mám user manager kde se provádí vytváření, editace atd. uživatele. Při editaci se provede kontrola na heslo, pokud je poskytnuté kolekci heslo k dispozici, provede se kontrola zda heslo odpovída uloženému, pokud ne tak to hodí výjimku s hláškou. Případně se provede kontrola zda nové heslo je ok a splňuje podmínky a taky v případě chyby se vyhodí výjimka InvalidStateException
Tyto výjimky odchytí try catch block ve formu v onSuccess metodě. Je tedy korektní tuto zprávu poslat ve formě flash message uživateli? Nebo by se to mělo vyhodnotit v catch a pak vytvořit flash zprávičku podle stavu?
- duke
- Člen | 650
Spíše bych to oddělil. V budoucnu můžeš chtít ty zprávičky např. překládat a mohou obsahovat parametry. Message ve výjimce by přitom měla sama o sobě být dostatečně popisná (obsahovat ty parametry už v sobě), a proto nevhodná jako klíč pro překlad.
Otázkou je, zda si ty parametrizované zprávy vytvářet až v těch catch blocích (pak by bylo asi nejpraktičtější si poslat potřebné parametry nějak už v té výjimce), a nebo nějakým jiným mechanismem (např. nějakým loggerem). Zřejmě by také šlo použít události (např. onInvalidLogin), do které by si presenter zaregistroval metodu, která by vytvořila odpovídající zprávičku dle dodaných parametrů.
- Tomáš Jablonický
- Člen | 115
Zprávičky z Exception nepatří do FlashMessage :-). Udělej si nějakej helper, který bude na základě code z Exception překládat zprávičky nebo je přepiš ručně jak chceš. Ale kdyby jsi vrazil chybovou hlášku, například z DBALException do FlashMessage tak by to uživateli moc neřeklo.
Vlastní výjimky jsou dobrou cestou, ale pak se může stát že v těle Try budeš mít třeba 10 Catch (přeháním).
A ještě jedna věc. Nikdy nepoužívej Nette výjimky k vyhození Exception – vytvoř si vlastní strom výjimek (InvalidArgumentException, InvalidStateException, atd.). Nikdo totiž nemůže zaručit, že za měsíc ty vájimky v Nette ještě budou.
- akadlec
- Člen | 1326
No běžné výjimky chytám a zpracovávám jinak, ale tady v tomto případě mám vyhozené speciálni výjimky takže vím na beton co v ní bude, takže nějaká db výjimka by se samo uživateli nezobrazila. Tak mě právě napadlo tam kde na beton vim co může přijít to rovnou přehodit do flash, takto bych si musel poslat nějaký řetězec a ten pak ifovat/kejsovat ne?
- Jan Tvrdík
- Nette guru | 2595
Ve většina případů je lepší kód výjimky vůbec nepoužívat. Třeba výjimky v C# nebo Javě kód normálně nepoužívají. Zpracování se dělá podle typu výjimky. Viz zase ta přednáška.