... будет трудно определить разницу между тем, когда он использует ValidationException, и временем, когда динамические элементы управления вызывают исключение.
Я думаю, что это главноеТочка, на которую вам следует обратить внимание при принятии этого решения.
Похоже, вы подразумеваете, что вышесказанное (неспособность отличить ваши собственные исключения от исключений «платформы») является плохой вещью.Это не обязательно так.ЕСЛИ вы используете ValidationException исключительно для представления ошибок проверки, тогда весь ваш код может корректно обрабатывать как ваши собственные, так и исключения платформы одинаково.Нет необходимости в особых случаях исключений платформы из пользовательских.
Это победа, на мой взгляд.Если у вас есть и CustomException, и ValidationException, возвращающиеся на ваш верхний уровень по тем же причинам , вам придется повторить какую-то логику так или иначе.Это плохо (больше обслуживания, больше шансов на появление ошибок).
Так что я считаю, что использование платформы ValidationException, вероятно, является хорошим способом сделать это, если вы используете ее строго для распространения проблем проверки.
Также подумайте о том случае, когда вы будете передавать / продавать части своего кода третьей стороне (скажем, это действительно круто, и вы делаете из этого продукт).Возможно, третьему лицу было бы проще, если бы ваш модуль генерировал «стандартные» исключения (они могут легко его интегрировать), а не занимался бы специальным случаем всего кода своего интерфейса для вашего модуля.Опять же, это справедливо только в том случае, если вы придерживаетесь случаев, когда стандартный модуль будет генерировать ValidationExceptions.
Давайте посмотрим на это с другой стороны.Вы говорите:
наш уровень бизнес-логики выдает исключение ValidationException
Именно поэтому я ставлю строго и исключительно выше.Вы должны убедиться, что согласны с ошибкой проверки.Давайте рассмотрим две гипотетические проблемы:
- «abc» не является допустимым числом
- недостаточно средств для этой операции
Для 1. проблема проста / ожидаемая проверка вводаошибка.Но на мой взгляд 2. нет.Это проблема бизнес-логики.Вы можете назвать это проблемой проверки (в транзакции перед дебетом вы «проверяете», есть ли достаточно средств), но я бы сказал, что это семантически очень отличается.
Я бы посоветовал не ставить этидва типа ошибок в одном и том же исключении "мешок", поскольку они имеют очень разные значения и могут (часто) приводить к разной логике потока приложений.(В приведенных выше двух примерах 1. должен держать пользователя в той же форме, как и любой другой тип «опечатки», но 2. вероятно, он должен перенаправить его на страницу, которая позволит ему пополнить свой счет.)
Подводя итог: использование стандартного исключения кажется мне хорошей идеей, если вы придерживаетесь его ожидаемой семантики.