Маючи надійний і добре розроблений API винятків, який є послідовним, дуже доречно. Використання цього для забезпечення ділових правил також може бути доречним. Насправді, на мій досвід, чим складніше правило бізнесу, тим більша ймовірність, що воно в кінцевому підсумку буде керовано таким чином. Часто так само просто, якщо не простіше написати систему, де очікуються винятки, ніж написати авторитетну логіку розгалуження.
Це означає, що прості правила, які можна описати в одному реченні, як правило, слід застосовувати запобіжним або авторитетним чином, залежно від того, що це є. Однак якщо у вас є правило, яке є багатовимірним і вимагає більше трьох-чотирьох факторів (особливо якщо вибір цих факторів ґрунтується на одному або декількох інших факторах), то кодування винятків може бути більш ретельним. Часто в цих випадках логічний шлях матиме чимало винятків-попередників, які потрібно кинути, (перевіряє, чому дія не може бути виконана), тоді (або навпаки) відбувається падіння безпеки (щоб перевірити, чи дійство дії дозволено ), іноді буде якась авторитетна логіка накопичення, яку потрібно перевірити (наявність нащадків / предків, попередник повідомляє, що об’єкти потрібно поставити тощо).
Однією з переваг, яка випливає з цього виду викидів винятків, є те, що вона дозволяє відокремлювати та використовувати повторно винятки попередників у кількох областях проекту. (Це суть орієнтованого на аспекти програмування.) Роблячи це, ви інкапсулюєте один конкретний аспект ваших загальних правил бізнесу в самостійний та підтримуваний компонент. Загалом ці компоненти відповідають 1-1 із викинутими повідомленнями про помилки. (Хоча іноді у вас буде один компонент, який викидає кілька різних винятків, майже ніколи не слід мати однаковий виняток, викинутий з кількох компонентів.)
На мою думку, складніше проектувати системи, які базуються на винятках, і початковий час розробки довший, оскільки вам доведеться будувати процес виключення на всіх N рівнях. Однак ці системи, як правило, набагато стабільніші. Хоча ніколи не можливо спроектувати систему, яка "не вийде з ладу", користь дизайну, заснованого на винятках, полягає в тому, що ви завжди очікуєте невдачі. Для більшості людей процес може бути контрінтуїтивним. Це як би просити вказівок і змусити когось сказати вам усі вулиці, які не слід включати.