Утверждение в программировании

Недавно у меня была дискуссия с коллегами по поводу изящного выхода из приложения.

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

ViewPoints:
Вариант 1: приложение должно информировать пользователя о том, что что-то пошло не так, попробуйте позже?

Мое мнение: пользователь нажмет кнопку «ОК». Что вы хотите, чтобы они сделали потом? Дождитесь экрана бесконечной загрузки или выйдите из приложения. Хм…

Вариант 2. Пользователь должен повторить попытку.

После 3 попыток вы знаете, что ничего не произойдет; тогда что?

Мой разум: Действительно…

Поскольку это неустранимая проблема для пользователя, плюс отображение ошибки отсутствия файла конфигурации не поможет пользователю.

Мы должны утверждать после того, как пользователь скажет «хорошо». Это будет изящный выход, не оставляя пользователя на экране бесконечной загрузки или в приложении, которое находится в неопределенном состоянии.

Окончательный вариант

Сообщение должно быть более интуитивным

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

В заголовке кнопки должно быть написано «Выход».

Это спорная тема, и у каждого будет свой подход и способ справиться с этим сценарием.

Здесь я пытаюсь изложить свое понимание и мысль.

Утверждение является исключением. Не рассматривайте утверждение как исключение.

Утверждение — это условие, которого ваша система не должна достигать в жизненном цикле приложения, однако, если оно достигает его, это означает, что она не может быть восстановлена ​​из этого состояния, не может продолжайте работать с ним и очень сильно хотите прервать в этот момент.

Утверждение является предварительным условием/ожиданием, то есть важно правильно запустить систему, а не неправильно запускать систему в будущем рабочем процессе системы.

Мы не утверждаем условия ошибки, которые могут быть устранены или возникают из-за действий пользователя. Например, если пользователь вводит неправильный ввод, который не позволит системе работать, это ошибка. Мы должны попросить пользователей предоставить правильный ввод. (С этим можно справиться. Поскольку это известное состояние приложения, которое восстановится, как только пользовательский ввод будет правильным.)

«Ошибка может быть обработана и должна быть обработана в обоих этих сценариях, нам действительно не нужны утверждения. Утверждение предназначено для тех, кто ОБЯЗАТЕЛЬНО считает, что наша система может работать и не может быть восстановлена ​​и переходит в невосстанавливаемое, неопределенное, замороженное состояние».

Он используется там, где разумно прервать действительно сложно.

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

ВНИМАНИЕ: вместо assert api мы должны использовать fatal api.

Я рассматриваю утверждение в более широком масштабе, а не утверждение как API, потому что

Утверждения по умолчанию отключены в сборке/среде выпуска.

Почему?

  1. Повышает читаемость кода
  2. Это увеличивает сбой/недостижимые точки четче
  3. Разработчик должен убедиться, что этот код недоступен на протяжении всего жизненного цикла приложения.
  4. Приложение никогда не будет находиться в состоянии неопределенности, зависания и бесконечной загрузки.

Читать далее:

Философия: FailFast, ReportBug и KeepErrorInformation

(☞ ͡° ͜ʖ ͡°)☞ http://wiki.c2.com/?ShipWithAssertionsOn

(☞ ͡° ͜ʖ ͡°)☞ http://wiki.c2.com/?DoNotUseAssertions