Найкраща практика Magento 2 для розташування та імен класу


15

У Magento 1нас звикли розміщувати свої заняття в цих довідниках

  • Блок
  • Помічник
  • Модель
  • Ресурс

і використовувати просте ім’я класу без жодної великої літери посередині імені.

Якщо ми розглянемо деякі випадки в Росії Magento 2 Core

Помічники

Розташування :
- \Foo\Bar\Helper
Назва :
- *.php
Приклади :
- \Magento\ImportExport\Helper\Report
-\Magento\Cms\Helper\Wysiwyg\Images


Спостерігачі

Розташування :
- \Foo\Bar\Observer
Назва :
- *.php
- *Observer.php
Приклади :
- \Magento\CustomerCustomAttributes\Observer\SalesOrderAddressAfterLoad
-\Magento\CustomerBalance\Observer\ProcessBeforeOrderPlaceObserver


Плагіни

Місцезнаходження :
- \Foo\Bar\Plugin
Назва :
- *.php
- *Plugin.php
Приклади :
- \Magento\Catalog\Plugin\Block\Topmenu
- \Magento\PageCache\Model\App\FrontController\BuiltinPlugin
Джерело : http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html#declaring-a-plugin


ConfigProvider

Розташування :
- \Foo\Bar\Model
Назва :
- *ConfigProvider.php
Приклади :
- \Magento\Tax\Model\TaxConfigProvider
-\Magento\Payment\Model\IframeConfigProvider


Мої запитання:

  • Якщо є якісь good/ bad/ bestпрактики для цього в Magento 2?
  • Якщо я хочу створити звичай, DataProviderнаприклад, яким він буде?
    • \Foo\Bar\Provider\CustomDataProvider
    • \Foo\Bar\DataProvider\Custom
    • \Foo\Bar\Model\Provider\CustomDataProvider
    • \Foo\Bar\Helper\Provider\CustomDataProvider
  • Як визначити побудову імені класу та місця розташування, папки в корені модуля, у моделі, в Helper тощо?
  • Це залежить від отриманого джерела даних / типу даних?
  • Коли нам потрібно додати суфікс до імені класу?


Частина відповіді на адресу Virtual Types: https://community.magento.com/t5/Magento-DevBlog/Virtual-Types-Naming-Convention/ba-p/61510

Відповіді:


10

Magento 2 не обмежується як Magento 1 лише кількома папками, такими як блок, помічник, модель тощо.
В основному ви можете розмістити клас у будь-якій потрібній вам папці. Це ви вирішите, оскільки клас інстанціюється з використанням повної назви класу, не з псевдонімами, як у Magento 1.

Моя рекомендація - згрупувати їх за функціональністю.

  • спостерігачі в Vendor/Module/Observer.
  • плагіни в Vendor/Module/Plugin
  • постачальників даних у Росії Vendor/Module/DataProvider.
  • ui, пов'язані з компонентами класи в Vendor/Module/Ui

але намагайтеся уникати дублювання імен. Я маю на увазі Vendor/Module/DataProvider/CustomDataProviderбуло б зайвим.

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

Підводячи підсумок, саме від вас залежить, як ви це зробите, просто будьте в цьому послідовними.

З точки зору функціональності не важливо, де ви розміщуєте заняття. Ви навіть можете зійти з розуму і помістити їх безпосередньо в Vendor/Moduleпапку, але ви, мабуть, цього не хочете.

Я думаю (але не зовсім впевнений), що єдине обмеження полягає в тому, що контролери повинні бути в папці Controller.


Я погоджуюсь, що ми можемо зійти з розуму, це хороший момент як поганий, але, як ви сказали, це відповідає нашому способу бачити речі. Можливо, коли Magento поділиться своїми внутрішніми технічними баченнями, як це було оголошено на MagentoLive France, ми матимемо більше інформації щодо цих питань. Дякую, що поділилися своєю думкою
Matthéo Geoffray

7

Я вважаю, що це ґрунтується на думках, але я погоджуюся, що є деякі невідповідності щодо іменування класів та місць у M2.

Ось список, який я придумав щодо імен папок. Для мене ви завжди повинні використовувати ці папки, коли зможете, щоб полегшити перегляд та розуміння модуля для будь-кого іншого:

  • Блок
  • Контролер
  • Модель
  • Спостерігач
  • Налаштування
  • Тест
  • Ui
  • тощо
  • i18n
  • вид
  • Крон
  • Помічник
  • Консоль
  • Апі
  • Підключати
  • DataProvider

Крім того, M2 використовує деякі дуже конкретні папки, але я не включив їх до цього списку:

  • Ціноутворення
  • Додаток
  • CustomerData
  • Сервіс
  • Шлюз
  • Файли
  • Перехідник
  • Компонент
  • ШаблонEngine

Хороша річ з M2 - це те, що ви можете використовувати та створювати будь-яку папку, яка вам потрібна. Якщо щось не належить до списку вище, створіть власну папку та поставте в них свої класи, просто намагайтеся бути послідовними.


У всіх ваших відповідях ми знаходимо ту саму ідею, можливість робити так, як ми хочемо, найголовніше - залишатися послідовними та регулярними у своїй побудові. Однак Magento було б здорово поділитися деякими внутрішніми уявленнями щодо цього, як вони оголосили ML. Як ви сказали, всім буде простіше зрозуміти розширення Core та Community. Дякую за вашу відповідь.
Маттео Джеффрей

6

Я думаю, що першочерговим завданням має бути зробити код якомога більше документування . Отже, замість того, щоб все вкладати в каталоги Model або Helper, краще знайдіть хороше ім’я, яке описує те, що робиться під кодом. Звичайно, це теж важче, бо вимагає набагато більше мислення.

Наприклад, замість того, щоб використовувати Model/Config/Converter.php, назва OrderStateMachine/TransitionsConfiguration/XmlToArrayConverter.phpговорить набагато більше того, що робить Модуль та клас.


Як ви сказали, для цього потрібно більше роздумів, щоб це було зрозуміло для нас, а також для тих, хто бачить розширення. Це ускладнює ситуацію на даний момент, але з часом стає більш ефективною. Дякую за вашу відповідь
Маттео Джеффрей

3

Вище вже є кілька справді хороших відповідей. Що я хотів би додати, це те, що вам слід уникати розміщення коду app/codeі замість цього використовувати метод установки на основі композитора, який в кінцевому підсумку помістить ваш код під vendor/.


Так, не хвилюйтесь. Я усвідомлюю це, формат - це лише приклад у моєму запитанні :) Але ви праві для людей, які не знають, що я буду редагувати, щоб це було зрозуміло. Дякую
Маттео Джеффрей

що є гарним тоном fooman
Аміт Бера
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.