Stratégie de conception - méthodes Helper qui jettent des exceptions
-
16-10-2019 - |
Question
Je suis un plugin pour mettre en œuvre un client qui utilisera la valeur Max Vente Quantité 'd'un article Stock Magento sur un produit comme un moyen de la fixation d'une limite supérieure sur les achats des clients au total.
Parce que je dois vérifier cette condition dans plusieurs événements, les actions du contrôleur, je ne peux pas contenir à seulement un observateur où je pouvais créer une fonction locale protégée qui vérifie cette condition de mon modèle de ressources.
Dans mes besoins, je limiterons les additions panier. Mais je me trouve dans un dilemme: du contrôleur addAction
je dois compter sur throw
- mais de sales_quote_merge_before
il semble que je pourrais effectivement désinitialiser les produits incriminés et envoyer un message à l'customer/session
, cependant, je pouvais lancer et à attraper, respectivement avec l'action du contrôleur à la place.
Mes questions sont les suivantes:
- Est-ce une mauvaise pratique de compter efficacement sur
throw
de l'aide du module? - Est-ce plutôt une méthode de modèle que je dois invoquer?
- Quelle est la meilleure stratégie de conception qui me permet de garder mon module sec?
Modifier
Au EE 1,12 Je ne vois que 4 cas de fichiers Helper/Data.php
qui jettent - 3 d'entre eux sont api2 / OAuth. Mage / Core, il fait une fois aussi, mais cela semble être le seul autre exemple. Divers 3e parties regardent comme ils adoptent des approches différentes ici.
Tous les commentaires sont les bienvenus.
La solution
Dire au client, « nous sommes désolés, vous ne pouvez pas acheter tant » est une exception. Le cas est prévu, il y a assez et vous mettre les produits dans le panier. Et un mot de plus: Il y a des blocs try et catch à l'intérieur de magento, par exemple dans \Mage_Checkout_CartController::addAction
:
// [...]
} catch (Mage_Core_Exception $e) {
if ($this->_getSession()->getUseNotice(true)) {
$this->_getSession()->addNotice(Mage::helper('core')->escapeHtml($e->getMessage()));
// [...]
Permettez-moi de le dire ainsi: Ils sont là à utiliser: -)