Я думаю, що важливим фактором є те, хто є вашими клієнтами послуг.
Якщо ваш сервісний рівень є лише архітектурною межею між шарами у вашому власному проекті, а клієнт сервісу знаходиться в межах однієї сфери довіри, тоді це нормально, щоб розслабитися, і нехай вивірені винятки пускаються на рівень контролера або на клієнт сервісу.
Однак для публічного коду; сервіс, який споживається третьою стороною або замовником, я вважаю, що більш чітко перекривати будь-які неперевірені винятки з винятком, орієнтованим на сервіс, в першу чергу, з точки зору безпеки, по-друге, для вільного з’єднання та чистої абстракції.
Виняток з рівня даних ніколи не повинен прямо робити це аж до кінцевого користувача веб-програми . Він потенційно містить внутрішню інформацію про вашу схему, ваші запити, інформацію про номер рядка, назви змінних чи функцій тощо. Виключення кінцевого користувача можуть бути захищені в безпечному режимі.
Зовнішній клієнт служби не переймається деталізацією вашої реалізації, і в будь-якому випадку не може впоратися з неперевіреними винятками, оскільки це проблеми або екологічні проблеми. У захищених програмах помилки бази даних просто недостатньо безпечні для розповсюдження, OracleException - ORA-01234 - ...
що може бути третьою таблицею, яка була вставлена. Клієнту слід дозволити вирішувати будь-які перевірені / очікувані винятки, з якими він може працювати, та розглянути все інше як потенційний звіт про помилку. Ваш контракт на обслуговування має бути атомною, послідовною, транзакційною абстракцією. Якщо він не може нічого зробити стосовно винятку, то єдине корисне, що залишилося, - це надати вам повідомлення про помилку. Ви вже маєте можливість реєструвати винятки, тож навіщо обтяжувати свого кінцевого користувача деталями? Ваш додаток може контролюватися, щоб ви вже знали про неперевірені винятки, перш ніж користувачі повідомлять про них.
Ніколи не нормально їсти винятки, і я не прихильник перевірених винятків, але я вважаю за краще скласти план, що відповідає природі загального продукту.