Мое мнение таково, что исключения / ошибки должны создаваться всякий раз, когда то, что должен делать метод, не может быть достигнуто.Таким образом, логика валидации никогда не должна вызывать исключения, за исключением случаев, когда валидация не может быть произведена (то есть по техническим причинам), а не только потому, что данные недействительны (в этом случае она вернет коды / сообщения валидации или что-либо, помогающее вызывающему абоненту исправитьdata).
Теперь случай с GetMember интересен, потому что все дело в семантике.Название метода предполагает, что член можно получить, передав идентификатор (сравните с методом TryGetMember для примера).Конечно, метод не должен выдавать такое же исключение, если идентификатор нигде не найден или если база данных не отвечает, но неверный идентификатор, переданный этому методу, вероятно, является признаком того, что что-то не так до этого вызова.За исключением случаев, когда пользователь может напрямую ввести идентификатор участника из интерфейса, и в этом случае должна произойти проверка перед вызовом метода.
Я много слышал о проблеме производительности.Я только что сделал простой тест с использованием C # и исключений trow / catch 1000.Время, затраченное на 1К, составляет 23 мс.Это 23 µ за исключение.Я думаю, что производительность больше не является первым аргументом здесь, за исключением тех случаев, когда вы планируете повышать более 2000 исключений в секунду, и в этом случае у вас будет снижение производительности на 5%, что я могу начать рассматривать.
Мое скромное мнение...