Dans Magento 1
nous étions habitués à placer nos classes dans ces répertoires
- Bloquer
- Assistant
- Modèle
- Ressource
et utilisez un nom de classe simple sans majuscule au milieu du nom.
Si nous examinons certains cas dans Magento 2 Core
Aides
Lieu :
- \Foo\Bar\Helper
Nom :
- *.php
Exemples :
- \Magento\ImportExport\Helper\Report
-\Magento\Cms\Helper\Wysiwyg\Images
Observateurs
Lieu :
- \Foo\Bar\Observer
Nom :
- *.php
- *Observer.php
Exemples :
- \Magento\CustomerCustomAttributes\Observer\SalesOrderAddressAfterLoad
-\Magento\CustomerBalance\Observer\ProcessBeforeOrderPlaceObserver
Plugins
Emplacement :
- \Foo\Bar\Plugin
Nom :
- *.php
- *Plugin.php
Exemples :
- \Magento\Catalog\Plugin\Block\Topmenu
- \Magento\PageCache\Model\App\FrontController\BuiltinPlugin
Source : http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html#declaring-a-plugin
ConfigProvider
Lieu :
- \Foo\Bar\Model
Nom :
- *ConfigProvider.php
Exemples :
- \Magento\Tax\Model\TaxConfigProvider
-\Magento\Payment\Model\IframeConfigProvider
Mes questions sont:
- S'il y a des
good
/bad
/best
pratiques pour cela dansMagento 2
? - Si je veux créer un custom
DataProvider
par exemple ce sera quoi?\Foo\Bar\Provider\CustomDataProvider
\Foo\Bar\DataProvider\Custom
\Foo\Bar\Model\Provider\CustomDataProvider
\Foo\Bar\Helper\Provider\CustomDataProvider
- Comment déterminer la construction du nom et de l'emplacement de la classe, un dossier à la racine du module, dans Model, dans Helper, etc.?
- Cela dépend-il de la source de données / du type de données récupérés?
- Quand devons-nous ajouter le suffixe au nom de la classe?
Une partie d'une réponse pour
Virtual Types
: https://community.magento.com/t5/Magento-DevBlog/Virtual-Types-Naming-Convention/ba-p/61510
la source
Je pense que c'est basé sur l'opinion, mais je conviens qu'il y a des incohérences concernant le nom des classes et les emplacements dans M2.
Voici la liste que j'ai trouvée concernant la dénomination des dossiers. Pour moi, vous devez toujours utiliser ces dossiers lorsque vous le pouvez afin de rendre votre module plus facile à parcourir et à comprendre pour n'importe qui d'autre:
En plus de cela, M2 utilise des dossiers très spécifiques mais je ne les ai pas inclus dans cette liste:
La bonne chose avec M2 est que vous pouvez utiliser et créer le dossier dont vous avez besoin. Si quelque chose n'appartient pas à la liste ci-dessus, créez votre propre dossier et mettez-y vos classes, essayez simplement d'être cohérent.
la source
Je pense que la priorité absolue devrait être de rendre le code aussi documenté que possible. Donc, plutôt que de tout mettre dans les répertoires Model ou Helper, trouver un bon nom qui décrit ce que fait le code en dessous est une meilleure approche. Bien sûr, c'est aussi plus difficile car cela demande beaucoup plus de réflexion.
Par exemple, plutôt que d'utiliser
Model/Config/Converter.php
, le nom enOrderStateMachine/TransitionsConfiguration/XmlToArrayConverter.php
dit beaucoup plus sur ce qu'un module et une classe font.la source
Il y a déjà de très bonnes réponses ci-dessus. Ce que je voudrais ajouter, c'est que vous devez éviter de placer du code sous
app/code
et utiliser à la place une méthode d'installation basée sur le compositeur qui finira par placer votre code sousvendor/
.la source