Стратегия разработки - Вспомогательные методы, которые создают исключения


Я внедряю плагин для клиента, который будет использовать значение "Максимальное количество продажи" товара на складе Magento для продукта в качестве средства установления верхней границы общего объема покупок клиентов.

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

В своих требованиях я буду ограничивать дополнения к тележке. Но я нахожусь перед дилеммой: от контроллера addAction мне нужно полагаться на throw - однако из sales_quote_merge_before кажется, что я мог бы эффективно отключить продукты-нарушители и отправить сообщение customer/session, хотя я мог бы бросить и поймать, соответственно, как с действием контроллера вместо этого.

Мои вопросы таковы:

  • Является ли эта плохая практика эффективной опорой на throw помощника модуля?
  • Это, скорее, модельный метод, который мне нужен для призвать?
  • Какова наилучшая стратегия проектирования, которая позволяет мне сохранить мой модуль СУХИМ?

Редактировать:

По состоянию на EE 1.12 я вижу только 4 экземпляра Helper/Data.php файлов, которые выбрасывают - 3 из них являются Api2/Oauth. Маг/Ядро тоже делает это один раз, но, похоже, это единственный другой случай. Различные третьи стороны выглядят так, как будто они используют здесь разные подходы.

Любые отзывы приветствуются.

Author: philwinkle, 2013-02-27

1 answers

Сказать клиенту: "Мы сожалеем, вы не можете купить так много" - это исключение. Ожидаемый случай таков, что их достаточно, и вы кладете продукты в корзину. И еще одно слово: внутри magento есть блоки try и catch, например, в \Mage_Checkout_CartController::addAction:

// [...]
} catch (Mage_Core_Exception $e) {
        if ($this->_getSession()->getUseNotice(true)) {
            $this->_getSession()->addNotice(Mage::helper('core')->escapeHtml($e->getMessage()));
// [...]

Позвольте мне сказать это так: они существуют для использования:-)

 1
Author: Fabian Blechschmidt, 2013-02-28 18:18:37