Возможно, это плохая идея. Во-первых, это символизирует принцип «определение безумия - это делать одно и то же дважды и каждый раз ожидать разных результатов». Во-вторых, этот шаблон кодирования не соответствует самому себе. Например:
Предположим, что уровень сетевого оборудования повторно отправляет пакет три раза при сбое, ожидая, скажем, секунду между сбоями.
Теперь предположим, что программный уровень повторно отправляет уведомление о сбое три раза при сбое пакета.
Теперь предположим, что слой уведомлений повторно активирует уведомление три раза в случае сбоя доставки уведомления.
Теперь предположим, что уровень сообщения об ошибках повторно активирует уровень уведомления три раза в случае сбоя уведомления.
А теперь предположим, что веб-сервер повторно активирует отчеты об ошибках три раза в случае ошибки.
А теперь предположим, что веб-клиент повторно отправляет запрос три раза после получения ошибки от сервера.
Теперь предположим, что линия на сетевом коммутаторе, которая должна направлять уведомление администратору, отключена. Когда пользователь веб-клиента наконец получает сообщение об ошибке? Я делаю это примерно через двенадцать минут.
Чтобы вы не подумали, что это просто глупый пример: мы видели эту ошибку в клиентском коде, хотя и намного, намного хуже, чем я описал здесь. В конкретном коде клиента разрыв между случившейся ошибкой и окончательным сообщением пользователю составил несколько недель, потому что многие слои автоматически повторяли попытки с ожиданием. Только представьте, что произойдет, если будет десять попыток вместо трех .
Как правило, правильное решение проблемы заключается в том, чтобы немедленно сообщить о ней и позволить пользователю решить, что делать. Если пользователь хочет создать политику автоматических повторных попыток, позвольте ему создать эту политику на соответствующем уровне в абстракции программного обеспечения.