Является ли плохой практикой писать методы, которые возвращают неисключенные исключения для проверки входных данных?Метод Validate
вернет значение NULL, если вход действителен, или вернет исключение, которое будет выдано, если вход фактически будет отправлен.
public Exception Validate(object input)
{
if (!SomeParametersMatch(input))
return new SomeException("Message...");
if (!SomeOtherParametersMatch(input))
return new SomeOtherException("Another message...");
// More cases here...
return null;
}
Таким образом, вы можете использовать ту же функцию для проверки ввода, отображая ответы пользователю и выбрасывая исключения в коде:
public void Submit(object input)
{
Exception ex = Validate(input);
if (ex != null) throw ex;
// Do whatever action here...
}
Например, если вы используете функции для пометки пробелов, допустимых для щелчка, вы можете вызвать Validate
для каждого пробела,помечая их как действительные, если возвращаемое значение не равно нулю.Тогда Submit
вызывается только после того, как пользователь фактически щелкнет по пробелу, и выбор будет завершен.Это устраняет дублирование кода, когда вам нужно убедиться, что ввод будет действительным, если вы выберете его.
Я мог бы заставить Validate
вернуть пустоту и просто выброситьисключения , но поскольку перехват исключений является большей частью генерации исключений , и Validate
будет выполняться на гораздо большем количестве недопустимых входных данных, чем допустимые входные данные, это казалось пустой тратой.Если бы Validate
использовалось только тогда, когда пользователь действительно отправлял данные, у меня не было бы проблем с использованием блока try / catch.Но так как он используется для фильтрации данных, представляемых пользователю, в большинстве случаев выбрасывая исключение, только для его обнаружения и удаления, он становится чрезвычайно расточительным.