Magento: лучший способ избежать конфликтов расширений - PullRequest
3 голосов
/ 16 сентября 2010

Каковы лучшие практики при создании расширения Magento, чтобы избежать конфликтов с другими расширениями, которые загружаются в магазин. Я знаю, как кодировать с помощью метода переопределения, методов наблюдателя и подробностей того, как сделать это предпочтительным способом. Это все еще не останавливает вас от конфликтов с другими модулями и обновлениями.

Alan Storm, если вы прочитали это, я также прочитал ваш недавний пост о переопределениях и обновляемости. Это лучший способ думать и для такого типа ситуации? Я также вижу расширения и статьи, созданные людьми, чтобы позволить нескольким классам расширять один и тот же класс.

1 Ответ

11 голосов
/ 17 сентября 2010

Лучший возможный способ избежать этой проблемы - по возможности использовать шаблон Observer, встроенный в Magento.Этого недостаточно в некоторых местах, но когда у вас есть опция, ее использование позволит вам хорошо играть даже с другими плохо поддерживаемыми расширениями.

Затем попробуйте переопределить минимальное количество классов.Это звучит очевидно, но были времена, когда я думал, что необходимо переопределить каждый из классов калькулятора доставки (код был простым, но его нужно было повторить).Еще немного поработав, вместо этого я смог переопределить один класс и избавить себя от головной боли при обслуживании.

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

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

function doSomethingUseful() {
    // ...100 lines of parent code...
    unset($result['badKey']);
    // ...100 lines of parent code...

    return $result;
}

Когда вы перейдете на обновление сайта, это еще 200 строк кода, которые могут вызвать ошибку.Плохие времена!Вместо этого что-то вроде этого часто работает (и является легким улучшением):

function doSomethingUseful() {
    $result = parent::doSomethingUseful();
    unset($result['badKey']);
    return $result;
}

Это быстрее, это более читабельно, это менее подвержено ошибкам, все выигрывают!

Надеюсь, что поможет!

Спасибо, Джо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...