Ostatnio zastanawiałem się w jaki sposób poprawnie zajmować się wyjątkami.
W aktualnym projekcie w pracy jest takie podejście, że w miejscach w których mogłoby się coś wywalić np. odwołanie do cache albo jakieś akcje na bazie danych stosowane są bloki try catch z dodaniem logowania do bazy danych na temat błędu który zaszedł. Do tego przypisywana czasem jest jakaś wartość do pola typu bool czy operacja się powiodła czy nie, tak aby patrząc na nią w kontrolerze potem wyświetlić użytkownikowi odpowiedni komunikat. W innych przypadkach gdy nie potrzeba dużej ilości danych w zwrotce np. dla jakiegoś POSTa serwis posiadający taki sam blok zwraca boola, który jest wysyłany przez kontroler. Spotkałem się też z podejściem w którym w kontrolerze są sprawdzane wartości jakichś pól obiektu czy np. Id != 0 lub Id !=null i w zależności od tego wysyłamy użytkownikowi komunikat.
Nad tym wszystkim jest jeszcze redirect w webie który w momencie wyłapania 500 czy innego błędu przerzuca nas na domyślną stronę z informującą o wystąpieniu błędu.
Mam wrażenie, że nie jest to zrobione zgodnie ze sztuką.
Moglibyście podrzucić jakieś sensowne artykuły, albo rzucić komentarzem?
Dodam hipotetyczny problem:
Użytkownik chce dodać nowy produkt do faktury.
Wysyła formularz, po stronie serwera okazuje się że nie ma faktury o takim numerze.
Czy w takim wypadku należy lepiej wyrzucić wyjątek ArgumentNullException i jakoś w sensowny sposób to wyłapać przed kontrolerem i zwrócić false?
Czy może zrobić to samo bez wyjątku?
A może jest w ogóle lepsza droga?