Библиотека, которая объединяет несколько разных классов, которые могут выдавать разные исключения, если ИМХО не позволяет исключениям изнутри просачиваться как их исходные типы. Вместо этого они должны быть заключены в специфичное для библиотеки исключение, которое как можно более четко связано с исходным типом исключения.
Например, MagicDatabaseLibrary может определять MagicDatabaseException, который, в свою очередь, имеет несколько производных исключений MagicDatabaseTimeoutException, MagicDatabaseAuthenticationException и т. Д. Если база данных SQL Server выдает исключение тайм-аута SQL Server (как бы оно ни называлось), оно должно быть включено в MagicDatabaseTimeoutException. Аналогично для любых других ожидаемых исключений, которые могут возникнуть.
Если этого не сделать, код, который вызывает библиотеку, не будет иметь практического выбора, кроме как использовать «обработку исключений Pokemon», если у него есть надежда на решение потенциальных проблем с базой данных. Например, если предполагается, что вызывающий код обрабатывает ситуацию, когда пользователь вводит учетные данные для входа в базу данных, и соединение не устанавливается, он должен иметь возможность перехватить это исключение. Если вызывающий код не знает, что это за тип исключения, он мало что может сделать, кроме как перехватывать каждое исключение, надеяться, что это было результатом неправильных учетных данных или чего-то в этом роде, и предоставлять пользователю сообщение о том, что соединение не удалось , Не так полезно, как предоставление упакованного исключения.