Если у вас есть внутренние ошибки библиотеки (непредвиденные), позвольте распространять исключения во время выполнения. Если в коде библиотеки есть ошибка, ожидается, что клиент потерпит крах. Исправьте ошибку в библиотеке. Не поймайте всех и не получите исключение, специфичное для библиотеки, это не принесет пользы. Р>
Если вы ожидаете, что что-то (иногда) пойдет не так, создайте это в API. Это основано на принципе, что вы не должны использовать исключения для нормального потока программы. Р>
Например:
ProcessResult performLibraryTask(TaskSpecification ts)
Таким образом, вы можете иметь ProcessResult указать условия ошибки:
ProcessResult result = performLibraryTask(new FindSmurfsTaskSpecification(SmurfColor.BLUE));
if (result.failed()) {
throw new RuntimeException(result.error());
}
Этот подход похож на обратный нулевой подход, но вы можете отправить дополнительную информацию клиенту. Р>
ИЗМЕНИТЬ:
Для взаимодействия, которое не соответствует согласованному протоколу, вы можете сбросить ошибки времени выполнения, которые вы можете документировать. Например:
if (currentPeriod().equals(SmurfColor.BLUE) && SmurfColor.GREEN.equals(taskSpecification.getSmurfColor()) {
throw new IllegalStateException("Cannot search for green smurfs during blue period, invalid request");
}
Обратите внимание, что это связано с взаимодействием, которое нарушило контракт, и ожидается, что этого не произойдет. Р>