Магенто 2. Технические рекомендации. Вопрос о зависимости версии модуля


Я просматриваю официальные документы здесь

Почему при изменении предпочтения класса , помеченного @api, вы можете зависеть от ОСНОВНОЙ версии, но при изменении предпочтения интерфейса , помеченного @api, вы должны зависеть от выпуска ВТОРОСТЕПЕННОЙ версии. Разве это не одно и то же?

То же самое относится и к реализации интерфейса (зависит от ВТОРОСТЕПЕННОГО ) и расширение конкретного класса (зависит от ОСНОВНОГО ), оба помечены @api

Каковы причины этого?

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

Author: Teja Bhagavan Kollepara, 2019-07-02

2 answers

Я также читал ту же техническую документацию некоторое время назад и пришел к такому же выводу. На первый взгляд это не имеет смысла.

Год или около того спустя, и я все еще смущен этим.

Мое лучшее предположение, что кто-то в Magento пытался заранее предсказать, что некоторые области претерпят значительные изменения.

Лично я редко кодировал что-то, что зависит от определенной версии. И если я столкнусь с несовместимостью, я создам другую версию файл(ы) для работы с этой конкретной версией. Model21.php, Model22.php, Model23.php и т.д. Вайоминд придерживается аналогичного подхода. Это немного неопрятно, но делает свою работу. Плюс ваш код все еще читаем. Это просто означает, что вам нужен кто-то, обладающий некоторыми знаниями, чтобы установить расширение, особенно если вы объединяете все файлы вместе.

Но я признаю, что не создал ничего слишком революционного. Я обычно стараюсь работать в рамках рамок.

 1
Author: Dominic Xigen, 2019-07-02 18:09:11

Я оставляю здесь возможный ответ, скорее предположение.

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

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

Однако это не относится к случаю, когда метод добавляется в конкретный класс, и такой метод уже существует в дочернем классе с другой сигнатурой. Или если в родительский класс добавлен абстрактный метод.

 0
Author: vitoriodachef, 2019-08-06 10:28:09