Myślę, że ważnym czynnikiem jest to, kim są Twoi klienci usług.
Jeśli twoja warstwa usług jest tylko architektoniczną granicą między warstwami w twoim projekcie, a klient usługi znajduje się w tej samej sferze zaufania, wtedy możesz się zrelaksować i pozwolić, aby niezaznaczone wyjątki wyskoczyły na warstwę kontrolera lub klienta usługi.
Jednak w przypadku publicznego kodu; usługa, z której korzysta osoba trzecia lub klient, myślę, że łatwiej jest ominąć wszelkie niesprawdzone wyjątki wyjątkiem zorientowanym na usługi, przede wszystkim ze względów bezpieczeństwa, po drugie z powodu luźnego łączenia i czystej abstrakcji.
Wyjątek warstwy danych nigdy nie powinien bezpośrednio docierać do użytkownika końcowego aplikacji internetowej . Potencjalnie zawiera wewnętrzne informacje o twoim schemacie, twoich zapytaniach, numerach linii, nazwach zmiennych lub funkcji itp. Wyjątki dla użytkowników końcowych mogą zostać zdezynfekowane w bezpiecznym ustawieniu.
Klient usług zewnętrznych nie przejmuje się szczegółami implementacji i i tak nie może obsłużyć niesprawdzonych wyjątków, ponieważ są to błędy lub problemy środowiskowe. W bezpiecznych aplikacjach błędy bazy danych po prostu nie są wystarczająco bezpieczne, aby się rozprzestrzeniać, OracleException - ORA-01234 - ...
co może być wstawioną trzecią tabelą. Klient powinien mieć możliwość radzenia sobie ze wszystkimi sprawdzonymi / oczekiwanymi wyjątkami, które może obsłużyć, i traktować wszystko inne jako potencjalny raport o błędzie. Umowa o świadczenie usług powinna być atomową, spójną, transakcyjną abstrakcją. Jeśli nie jest w stanie nic zrobić z wyjątkiem wyjątku, jedyną przydatną rzeczą, która pozostała, jest zgłoszenie błędu. Masz już możliwość zarejestrowania wyjątku, więc po co obciążać użytkownika końcowego szczegółami? Twoja aplikacja może być monitorowana, abyś wiedział o niezaznaczonych wyjątkach, zanim użytkownicy je zgłoszą.
Nigdy nie można jeść wyjątków, nie jestem też fanem sprawdzonych wyjątków, ale wolę mieć plan odpowiedni dla charakteru całego produktu.