Как правило, трудно найти хорошую стратегию обработки исключений. У каждого подхода есть свои недостатки. В частности, Yours хорош в некотором смысле (централизованное расположение для обработки сбоев), но страдает этим недостатком:
Обработчик исключений, который вы описываете, будет иметь специальную обработку для каждого возможного исключения. Со временем это станет фокусом вашего приложения: каждый раз, когда вы добавляете новые функции, вам также нужно будет добавлять логику обработки исключений в ваш обработчик. Это означает, что:
- Обработчик сильно зависит от других частей, изменение в impl. некоторые функции могут вызывать соответствующие изменения в обработчике. Вы должны быть осторожны в синхронизации этих двух.
- У обработчика плохая связность (есть много причин для изменения) - он содержит пересечение всех функций вашего приложения.
Другая проблема - восстановление после ошибок. После того, как выдается исключение (и пользователю предоставляется некоторое уведомление), пользователь хочет продолжить использование приложения. Это означает, что если ваш код начал изменять внутренние структуры данных, а затем остановился из-за исключения, вам нужно будет отменить эти изменения (или, по крайней мере, вернуть структуру данных в работоспособное состояние), прежде чем разрешить дополнительное взаимодействие с пользователем. Достижение этого требует нового понимания того, как организованы ваши данные. Одним из возможных решений является транзакции с БД. С другой стороны, этот вид представления более сложен, чем простые старые структуры данных, поэтому вам необходимо сопоставить его с потребностями вашего приложения (это игрушка / прототип?)