Множество методов кода, написанных моими коллегами, выполняют свою собственную обработку ошибок, обычно путем перехвата, уведомления и ведения журнала.
В этих случаях методы возвращают логическое значение, указывающее успех или неудачу.
Иногда, если метод дает сбой, я хочу, чтобы вызывающий код знал, почему, и возврата логического значения недостаточно.
Один из способов обойти это - оставить обработку ошибок в методах, но сделать метод недействительным и заставить методы выдавать свои исключения.
Однако в последнее время у меня появилась привычка возвращать исключения в соответствующих методах, обычно в методах действия, которые в противном случае могли бы быть недействительными, но где я хотел бы узнать статус действия.
Преимущества возврата исключения по сравнению с наличием метода void, создающего исключение, заключаются в том, что я думаю, что это упрощает использование вашей библиотеки другими программистами, и, что еще более важно, это означает, что вы можете безопасно вызывать этот метод без беспокоиться о том, чтобы поймать исключение
Например, если метод просто void, может быть не сразу очевидно, что программист должен обработать успех или неудачу.
Но если в методах конкретно указывается тип возвращаемого значения Exception, то вы знаете, что при желании можете проверить успех или неудачу. Но это также означает, что вам не нужно беспокоиться об обнаружении ошибки, если вы этого не хотите.
Имеет ли это смысл? Может быть, я не использовал лучший пример, , но в целом нормально возвращать исключения или существует лучший шаблон?
UPDATE
Ух ты, подавляющий результат никак . Я так и думал. Я должен сказать, что выполнение (возвращение исключения) своего рода решило проблему, но это было неправильно.
Итак, из некоторых ваших ответов лучшим решением для этих конкретных сценариев (сложный класс или класс с одной или несколькими внешними зависимостями (например, веб-служба)), по-видимому, является пользовательский класс результатов?
UPDATE:
Я действительно ценю все мнения, я читаю все и тщательно обдумываю все входные данные.
В настоящее время я предпочитаю использовать метод void, выбрасывать исключения, а затем ловить их снаружи .... это лучше?