Предварительные условия Guava Обработка исключений RuntimeExceptions

Как я понял, мы используем предварительные условия Guava для быстрого сбоя перед изменением некоторых состояний объектов (хороший ответ здесь от stackru). И это хорошо. Однако он генерирует исключения Runtime, и это не любимые исключения для пользователя приложения (500 ошибок и т. Д.). Поэтому мне нужно, чтобы вы помогли мне с дизайном.

У меня есть интерфейс, который объявляет много методов. У каждого метода есть аргументы, которыми нужно управлять (например, не ноль). Поэтому в классе реализации я использую инструкции, подобные следующим:

Preconditions.checkNotNull(fooObj);

Однако программа, вызывающая этот API, может аварийно завершить работу из-за исключительной ситуации во время выполнения, то есть в данном случае NullPointerException.

Итак, как вы справляетесь с этими непроверенными исключениями?

Спасибо.

-------- РЕДАКТИРОВАТЬ Слои приложения:

  • Уровень доступа к данным

  • API объявляет методы, которые обмениваются DTO

  • Процесс реализации API и проверки аргументов с использованием Guava

  • Веб-сервис в зависимости от уровня процесса

2 ответа

Сбой предварительного условия означает, что в вашей программе есть ошибка. Пользователи не должны сталкиваться с ними, если они не нашли ошибку в вашей программе.

Ваша программа в целом должна показывать какое-то сообщение об ошибке пользователям в случае ошибки, но, более того, вы должны быть проинформированы, чтобы вы могли исправить ошибку в первую очередь.

Вы справляетесь с ними, разрабатывая свою программу, чтобы они никогда не происходили. Эти предварительные методы предназначены для обнаружения ошибок и помогают точно определить причину, а не для проверки ввода пользователя.

Если вы определяете только API, а не программы, которые его вызывают, то вы "обрабатываете" его, говоря людям в своей документации, что рассматриваемые аргументы не должны быть нулевыми, и оставляете проблему удовлетворения этого требования для них.

Если вы также пишете вызывающую программу, сначала постарайтесь убедиться, что исключение просто никогда не произойдет. Вы также можете позвонить в try/catch блок, чтобы поймать NullPointerException, но цель блока catch должна состоять в том, чтобы дать вам лучшее уведомление об ошибке (например, записать сообщение в журнал или вызвать предупреждение) и обстоятельствах запуска, и, возможно, отключиться более изящно или дать более понятное сообщение об ошибке. Попытка восстановиться после сбоя должна быть сделана с большой осторожностью или вообще не предприниматься - если произошел сбой такого рода, значит, что-то пошло не так, как вы не предвидели, и правильный способ восстановления может быть непредсказуемым.

Другие вопросы по тегам