В 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
- Как определить структуру имени и местоположения класса, папки в корне модуля, в Model, в Helper и т. Д.?
- Зависит ли это от извлеченного источника данных / типа данных?
- Когда мы должны добавить суффикс к имени класса?
Часть ответа для
Virtual Types
: https://community.magento.com/t5/Magento-DevBlog/Virtual-Types-Naming-Convention/ba-p/61510
источник
Я считаю, что это основано на мнениях, но я согласен, что есть некоторые несоответствия относительно имен классов и местоположений в M2.
Вот список, который я придумал относительно именования папок. Для меня вы всегда должны использовать эти папки, когда можете, чтобы ваш модуль был легче просматривать и понимать для всех остальных:
Кроме того, M2 использует несколько очень специфических папок, но я не включил их в этот список:
Хорошая вещь с M2 - то, что вы можете использовать и создавать любую нужную папку. Если что-то не входит в список выше, создайте свою собственную папку и поместите в нее ваши классы, просто постарайтесь быть последовательными.
источник
Я думаю, что главным приоритетом должно быть сделать код максимально самодокументированным . Так что вместо того, чтобы помещать все в каталоги Model или Helper, лучше найти хорошее имя, которое описывает, что делает код под ним. Конечно, это также сложнее, потому что требует гораздо больше размышлений.
Например, вместо использования
Model/Config/Converter.php
имяOrderStateMachine/TransitionsConfiguration/XmlToArrayConverter.php
говорит гораздо больше о том, что делает модуль и класс.источник
Уже есть несколько действительно хороших ответов. Я хотел бы добавить, что вы должны избегать размещения кода под
app/code
и вместо этого использовать метод установки, основанный на композиторе, который в конечном итоге поместит ваш код подvendor/
.источник