Vyzahování výjimek a pád aplikace

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

Zdravím,

narazil jsem nedávno na takovou situaci, kdy na ostrém webu se zobrazila stránka server 500 error a majitel webu volal ať chybu opravím.

Zjistilo se, že nově přidaná komponenta vyhazuje výjimku, protože v jednom případě, kdy byl uživatel přihlášen a měl ještě nějaké přízaky.

Jednalo se o komponentu, která se stará o vykreslování měřících skriptů, což není důležité pro běh celého webu. Web na kterém se to stalo je eshop a návštěvnící si kvůli této chybě nemohli udělat objednávku, což je průser.

To mně dovedlo k myšlence, zda je nějakým způsobem možné určit:

  • výjimky, které jsou závažné natolik aby spadla celá aplikace
  • výjimky, které stačí zalogovat pro programátora a není potřeba aby kvůli jim padal web (například mnou zmíněná komponenta pro vykreslování měřících kódů)

Předem děkuji za odpověď

Lukes
Silver Partner | 68
+
0
-

No zde je spíše problém s špatně navrženou komponentou, případně její připojování k aplikaci, kdy nemá vše potřebné. Jako výjimka je výjimka, prostě pokud není zachycena, tak shodí aplikaci. Osobně si nedokážu představit jak by si to chtěl odchytávat nějak globálně. Ono rozlišit kritickou a nějakou méně závažnou výjimku je obecně docela problematické, protože nevím jestli po vyhození výjimky může aplikace fungovat dál.

Samozřejmě, že si můžeš udělat typ výjimek, které budeš nějak rozlišovat a někde v presenteru odchytávat a případně do na stránku posílat nějakou hlášku, ale to už je spíše tvoje aplikační logika.

ViPEr*CZ*
Člen | 818
+
0
-

No to je vlastnost exceptions. A bud si ji podle jmena zachytite a adekvatne zareagujete a nebo se na to vyprdnete a aplikace spadne :-) Skoro ve 100% kvuli tomu, ze jsme lide na neco zapomenete. Tohle je takovy klasicky scenar, kdy se vyplati (a to snad jakkoliv) testovat. :-)

GEpic
Člen | 566
+
0
-

Však je možné rozlišit co je kritická a co není:

try {

} catch () {

} finally {

}

Zde se můžete rozhodnout, zda-li hodit pětistovku, nebo pokračovat dál. Ale chce to nad každým kusem kodu přemýšlet a testovat, jaké zde můžou nastat situace a snažit se odchytit všechny možné exceptions. Nesnažit se toto řešit globálně, chytání vyjímek vyžaduje extra péči, protože uživatel toho z pravidla rozbije víc, než vy při lazení.

Editoval GEpic (20. 8. 2016 19:28)