Стратегия разработки - Вспомогательные методы, которые создают исключения
Я внедряю плагин для клиента, который будет использовать значение "Максимальное количество продажи" товара на складе Magento для продукта в качестве средства установления верхней границы общего объема покупок клиентов.
Поскольку мне нужно проверить это условие в нескольких событиях, действиях контроллера, я не могу передать его просто наблюдателю, где я мог бы создать локальную защищенную функцию, которая проверяет это условие из моей модели ресурсов.
В своих требованиях я буду ограничивать дополнения к тележке. Но я нахожусь перед дилеммой: от контроллера addAction
мне нужно полагаться на throw
- однако из sales_quote_merge_before
кажется, что я мог бы эффективно отключить продукты-нарушители и отправить сообщение customer/session
, хотя я мог бы бросить и поймать, соответственно, как с действием контроллера вместо этого.
Мои вопросы таковы:
- Является ли эта плохая практика эффективной опорой на
throw
помощника модуля? - Это, скорее, модельный метод, который мне нужен для призвать?
- Какова наилучшая стратегия проектирования, которая позволяет мне сохранить мой модуль СУХИМ?
Редактировать:
По состоянию на EE 1.12 я вижу только 4 экземпляра Helper/Data.php
файлов, которые выбрасывают - 3 из них являются Api2/Oauth. Маг/Ядро тоже делает это один раз, но, похоже, это единственный другой случай. Различные третьи стороны выглядят так, как будто они используют здесь разные подходы.
Любые отзывы приветствуются.
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()));
// [...]
Позвольте мне сказать это так: они существуют для использования:-)