Предотвращение дырявой абстракции при использовании асинхронности

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

      public function execute()
{
    try {
        $this->importer->import();
        $this->messageManager->addSuccessMessage(__('The import has been successfully performed.'));
    } catch (Exception $e) {
        $this->logger->error($e->getMessage());
    }

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

Есть рекомендации как решить эту проблему?

Обновление: я предполагаю, что это две разные обязанности:

  1. импорт
  2. Запланировать импорт

Так что я думаю, что они вообще не взаимозаменяемы.

1 ответ

Итак, после тщательного размышления я пришел к выводу, что запуск скрипта и его планирование — это два отдельных действия. Первоначально я думал, что они должны отличаться только объемом деталей реализации; Я попал в эту ловушку, потому что cron, который считывает, что MQ запускается каждую минуту, поэтому выполнение запланированного сценария кажется почти мгновенным, как если бы он запускался напрямую.

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

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