Нет абсолютно ничего, что могло бы помешать вам делать исключения как из правил, так и из правил. Я бы использовал исключения в двух случаях:
Нарушение предусловия . Если спецификация вашей функции гласит: «потраченная сумма не должна превышать лимит для этого типа учетной записи», и пользователь, зная это , в любом случае указывает больший лимит, кидает исключение прямо в него!
Нарушение постусловия . Если все предварительные условия выполнены, но из-за непредвиденного отказа (например, соединение с базой данных или завершение транзакции нарушает антимонопольное законодательство), вы не можете предоставить правильный результат, не предоставляйте его. Брось исключение.
Поскольку вся бизнес-логика , вероятно, находится в одном компоненте и не зависит ни от чего другого, случай 2 для бизнес-исключений встречается довольно редко. И то, что попадает в случай 1, должно быть проверено во внешнем приложении. Это заставляет меня думать, что подход к отказу от исключений бизнес-логики заключается не в том, что вы " не должны делать ", но скорее всего " вам в большинстве случаев не нужно ".
В любом случае, с точки зрения языка, на котором вы программируете, он едва ли замечает разницу между «техническими» и «бизнес» исключениями, поэтому он будет обрабатывать их все правильно. Во-вторых, исключения где-то ловятся. Я предполагаю, что, с точки зрения архитектора, бизнес и технические исключения будут включены в различные компоненты. Конечно, если только они фактически не защищены, просто отображение сообщений об ошибках без программной обработки попадает в эту категорию. Поэтому использование одного и того же механизма не заставит вас смешивать эти ошибки.
Итак, я хочу сказать, что если вы решили не отбрасывать исключения как концепцию программирования, вы можете использовать их и для бизнес-логики.