Magento 2で何(タイプの)クラスが生成されますか?
質問
Magento 2では、自動的に生成され、var/generation
に格納され、コアコードで使用されている一連のクラスがあります。
コアモジュールの1つを複製してカスタムモジュールを作成しようとしている間、私のモジュールにも発生したクラスがいくつかあります。
生成されたクラスでは、プロキシ、インターセプター、工場....
自動生成されたクラスまたはクラスの種類の完全なリストはありますか?
そして並んで質問のように...いつ/どこに生成されますか?
解決
さまざまなエンティティを生成する理由が異なります。
プロキシ - 遅延ロードに使用されます。しかし、各タイプは別々のプロキシクラスを必要とし、それが手動でそれらを手動で書くのが厄介になるでしょう。Magentoはそれらを生成します。 yoはdi.xml のプロキシへの参照のみを見つける
ファクトリ - 非インジェクタ(エンティティ)を作成するために使用されるクラスです。プロキシと同じです。 PHPはまだ一般的なものではありませんので、開発者がボイラープレートコードを書き込むことではない工場を自動生成します。 Magentoコード全体で工場と対話します。おそらくあなたはあなたのエンティティのあなた自身の工場を必要とするでしょう。対応するファクトリをコンストラクタに依頼し、次の実行またはコンパイラ実行中に生成されます。
interceptor - インフラストラクチャクラスは、interceptionコンポーネントで使用されます。 FlaningmanaとPhilウィンクルが気付かれないようにあなたは彼らと交流するべきではありません。
生成された他のエンティティ(オブジェクトグラフプロファイリングモード用のロガー)がありますが、これら3は最も重要です。
マゼント2もまとめることができます。 コンパイルはDIと傍受を速くします。すべてのコード生成とコンパイルは、dev / tools / magento / tools / di / compiler.php で行うことができます。
他のヒント
コンセプトから:
あなたが触れたり使ったりする必要がないので、どの種類のクラスが自動的に生成されるかを知る必要はありません。
彼らは(それでも?
内部部品が新しいものの必要性を得るときにどのタイプが存在する可能性があります。しかし、それらへのアクセスは常に通常の文書化されたAPIの後ろに隠されています(一般に関数呼び出しとして知られています)
これは、マゼントが新しいプラットフォームへのアスペクト指向のアプローチをどのように生成するかです。動的にディスカッチする代わりに、実際に前、周り、および「イベント」を生成することによって。これは、プラットフォームのためのプログラマーとパフォーマンスのための利便性のバランスを打ちます。
自動依存噴射などの技術は、反射を介して実行されるのではなく、生成されたクラスに平坦化されています - これは性能を向上させるための技術です。