Вопрос

Довольно новичок в объектно-ориентированном программировании и очень новичок в программировании на 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?

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

Если строк кода много, вы можете обернуть их в функцию для проблем с читабельностью.

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

если это не связано с вашим модулем, возможно, их можно написать в статическом классе

...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top