Posiadanie solidnego i dobrze zaprojektowanego API wyjątku, który jest spójny, jest bardzo odpowiednie. Wykorzystanie tego do egzekwowania reguł biznesowych może być również odpowiednie. W rzeczywistości z mojego doświadczenia wynika, że im bardziej skomplikowana reguła biznesowa, tym większe prawdopodobieństwo, że zostanie w ten sposób potraktowana. Często jest tak samo łatwo, jeśli nie łatwiej, napisać system, w którym spodziewane są wyjątki, niż napisać autorytatywną logikę rozgałęziania.
Oznacza to, że proste reguły, które można opisać w jednym zdaniu, powinny być ogólnie stosowane w sposób zapobiegawczy lub autorytatywny, w zależności od tego, które są. Jeśli jednak masz regułę, która jest wielowymiarowa i wymaga więcej niż trzech lub czterech czynników (szczególnie jeśli wybór tych czynników jest oparty na jednym lub więcej innych czynników), kodowanie wyjątków może być łatwiejsze do utrzymania. Często w tych przypadkach ścieżka logiczna będzie zawierała wiele wyjątków prekursorów, które muszą zostać zgłoszone (sprawdza, dlaczego działanie nie może zostać wykonane), a następnie (lub odwrotnie) do bezpieczeństwa (aby sprawdzić, czy działanie jest autoryzowane) ), czasami będzie istniała pewna autorytatywna logika akumulacji, która musi zostać sprawdzona (dostępność potomka / przodka, prekursor stwierdza, że obiekty muszą być umieszczone itp.)
Jedną z korzyści wynikających z tego typu zgłaszania wyjątków jest to, że pozwala oddzielić wyjątki od prekursorów i ponownie je wykorzystać w wielu obszarach projektu. (To jest istota programowania zorientowanego na aspekty.) Robiąc to, ujmujesz jeden szczególny aspekt twoich ogólnych reguł biznesowych w samodzielny i łatwy do utrzymania komponent. Zasadniczo te składniki będą odpowiadać 1-1 z wyświetlanymi komunikatami o błędach. (Chociaż czasami będziesz mieć jeden komponent, który generuje kilka różnych wyjątków, prawie nigdy nie powinieneś mieć tego samego wyjątku z wielu komponentów).
Moim zdaniem trudniej jest zaprojektować systemy oparte na wyjątkach, a początkowy czas programowania jest dłuższy, ponieważ musisz zbudować proces wyjątku na wszystkich poziomach N. Jednak na ogół systemy te są znacznie bardziej stabilne. Chociaż nigdy nie jest możliwe zaprojektowanie systemu, który „nie zawiedzie”, zaletą projektowania opartego na wyjątkach jest to, że zawsze oczekujesz awarii. Dla większości ludzi proces może być sprzeczny z intuicją. To tak, jakby pytać o drogę i kazać komuś powiedzieć wszystkim ulicom, których nie należy włączać.