クラスの場所と名前に関する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
  • クラス名と場所、モジュールのルート、フォルダー、モデル、ヘルパーなどの構成を決定する方法は?
  • 取得したデータソース/データタイプに依存しますか?
  • クラス名に接尾辞を追加する必要があるのはいつですか?


の応答の一部Virtual Typeshttps : //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


私たちは夢中になることができることに同意します、それは悪いことと同じくらい良い点ですが、あなたが言ったように、それは物事の見方によるものです。MagentoLiveフランスで発表としてMagentoのは、その内部の技術的なビジョンを共有したときに多分、我々は、これらの点に関する詳細な情報を持ってあなたの意見を共有していただきありがとうございます
MatthéoGeoffray

7

私は意見に基づいていると思いますが、M2のクラスの命名と場所に関して矛盾があることに同意します。

これが、フォルダの命名に関して思いついたリストです。私にとっては、他の人がモジュールを簡単に閲覧して理解できるようにするために、できる限りこれらのフォルダーを使用する必要があります。

  • ブロック
  • コントローラ
  • モデル
  • 観察者
  • セットアップ
  • テスト
  • うい
  • 国際化
  • 見る
  • クロン
  • ヘルパー
  • コンソール
  • API
  • プラグイン
  • DataProvider

その上、M2はいくつかの非常に特殊なフォルダーを使用しますが、このリストには含まれていません。

  • 価格
  • アプリ
  • 顧客データ
  • サービス
  • ゲートウェイ
  • ファイル
  • アダプタ
  • 成分
  • TemplateEngine

M2の良い点は、必要なフォルダを使用して作成できることです。上記のリストに含まれていないものがある場合は、独自のフォルダーを作成し、クラスをそれらに入れるだけで一貫性を保つようにしてください。


あなたのすべての答えで、私たちは同じアイデア、私たちが望むようにする可能性、そしてその構築において一貫性と規則性を保つことが最も重要です。しかし、MagentoがMLにアナウンスするときに、これに関するいくつかの内部ビジョンを共有することは素晴らしいことです。あなたが言ったように、誰もがコア拡張機能とコミュニティ拡張機能を理解しやすくなります。ご回答有難うございます。
マテオジェオフレイ

6

私は、コードを可能な限り自己文書化することを最優先事項とすべきだと思います。そのため、すべてをModelまたはHelperディレクトリに入れるのではなく、その下のコードが何をするのかを説明する適切な名前を見つけるのがより良いアプローチです。もちろん、より多くの思考を必要とするため、より困難です。

たとえば、を使用するのModel/Config/Converter.phpではなく、名前OrderStateMachine/TransitionsConfiguration/XmlToArrayConverter.phpはモジュールとクラスが何をするかをより多く示します。


あなたが言ったように、私たちだけでなく、拡張機能を見る人にとっても明確にするためには、より多くの思考が必要です。それは現時点で物事を難しくしますが、時間とともにより効果的になります。ご回答ありがとうございます
マテオジェフレイ

3

上記にはすでにいくつかの本当に良い答えがあります。私が追加したいのは、コードを配置することを避けapp/code、代わりにコードを配置することになるコンポーザーベースのインストール方法を使用することvendor/です。


はい、心配しないでください。フォーマットは私の質問の例にすぎません:)しかし、あなたが私がそれを明確にするために編集することを知らない人には正しいです。ありがとう
MatthéoGeoffray

それは良い点のfoomanある
アミットベラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.