Помогите написать наблюдателю «Magento Way»
-
13-12-2019 - |
Вопрос
Довольно новичок в объектно-ориентированном программировании и очень новичок в программировании на Magento, но пытаюсь изучить «правильный путь».
Я пишу наблюдатель перед сохранением для обновления атрибутов продукта на основе других атрибутов продукта.У меня это работает (в самом простом смысле).Теперь я пытаюсь найти правильный способ заставить его делать то, что я хочу.У меня есть...
class Company_Namespace_Model_Observer
{
public function UpdateStuff(Varien_Event_Observer $observer)
{
$product = $observer->getEvent()->getProduct();
$product->setData('MyAttribuite', 'NewData');
}
}
Это прекрасно работает.Но теперь я хочу, чтобы «NewData» представляла собой набор кода.Моей первой мыслью было добавить в класс больше публичных функций, но это не сработало.Если бы это был мой единственный вопрос, я уверен, что где-то уже нашел бы ответ.Но затем, подумав обо всех примерах, которые я видел, является ли внутри этого класса подходящее место для размещения этих функций, или мне следует иметь еще один файл в каталоге Helper?
Вторая часть вопроса: следует ли UpdateStuff()
функция получает возвращаемые значения от других функций, таких как...
$MyNewData = SomeFunction($product);
$product->setData('MyAttribuite', $MyNewData);
или мне просто позвонить SomeFunction($product)
и установил ли он новые данные?
или это не имеет особого значения, и я просто слишком много читаю о написании вашего кода «способом Magento»
Решение
В приведенном вами примере, если код, который вы реализуете, специфичен для вашего Observer
класс, то оставь это себе.Не делайте свою функцию public
если вам это не нужно, поскольку я не думаю, что вам понадобится доступ к нему напрямую из-за пределов класса.
Я сам не большой поклонник помощников, разработчики склонны использовать их по неправильным причинам (группировать группы методов, которые не связаны друг с другом).
Думайте не только о Magento, но и с точки зрения разработчика (Magento в любом случае не идеален).Сделайте свой код многоразовый, чистый и оптимизированный
Другие советы
находится ли внутри этого класса подходящее место для размещения этих функций, или мне следует иметь еще один файл в каталоге Helper?
Если вам нужно несколько строк кода, связанных с текущим продуктом, вы можете написать их непосредственно в функции наблюдателя.
Если строк кода много, вы можете обернуть их в функцию для проблем с читабельностью.
В качестве хорошей практики для программиста, если расчет необходимо повторно использовать где-то еще и он связан с вашим модулем, вы можете добавить функцию в помощник вашего модуля.
если это не связано с вашим модулем, возможно, их можно написать в статическом классе
...