Magento 2で生成されるクラス(のタイプ)は何ですか?


9

Magento 2には、自動的に生成されて保存される一連のクラスがありvar/generation、コアコードで使用されます。
コアモジュールの1つを複製してカスタムモジュールを作成しようとしているときに、モジュールにもいくつかの生成されたクラスがあることがわかりました。
生成されたクラスでは、プロキシ、インターセプター、ファクトリーなどを見てきました。

自動生成されるクラスまたはクラスのタイプの完全なリストはありますか?
そして副次的な質問として...いつ/どこで生成されますか?

回答:


9

異なるエンティティを生成する理由はいくつかあります。

プロキシ -遅延読み込みに使用されます。ただし、各タイプには個別のプロキシクラスが必要なので、開発者が手動で記述してMagentoが生成するのは面倒です。Yoは、プロキシへの参照のみをdi.xmlで見つけます。

ファクトリ -は、非注射剤(エンティティ)の作成に使用されるクラスです。プロキシと同じ。PHPにはまだジェネリックスがないため、開発者がボイラープレートコードを記述しないようにファクトリを自動生成します。Magentoコード全体でファクトリーと対話します。ほとんどの場合、エンティティには独自のファクトリが必要になります。コンストラクターで対応するファクトリーを要求するだけで、次の実行時またはコンパイラーの実行時に生成されます。

インターセプター -インターセプトコンポーネントによって使用されるインフラストラクチャクラスです。FlyingmanaとPhil Winkleが気づいたように、どうしてもそれらを操作するべきではありません。

オブジェクトグラフプロファイリングモードのロガーなど、他にも多数のエンティティが生成されますが、これらの3つが最も重要です。

Magento 2もコンパイルできます。コンパイルにより、DIとインターセプトが速くなります。すべてのコード生成とコンパイルは、dev / tools / Magento / Tools / Di / compiler.phpで実行できます


2

コンセプトから:

どのタイプのクラスが自動生成されるかを知る必要はありません。クラスに触れたり使用したりする必要はなく、そうする必要もありません。

それらはその場で(まだ?)生成されますが、後でcliコマンドなどで生成されるはずです。

存在するタイプのリストは、内部部品が新しいものを必要とするときにいつでも大きくなる可能性があります。しかし、それらへのアクセスは常に、文書化された通常のAPI(一般に関数呼び出しとして知られている)の背後に隠れて行われます。


1
「またはそれらを使用する」かどうかはわかりません。次に例を示しMagento\Cms\Block\Blockます\Magento\Cms\Model\BlockFactory。コンストラクタでは、のインスタンスが使用されます。そのクラスはコードのどこにもありません。でのみ見つかりvar/generationます。したがって、同様のモジュールを実行している場合は、同様のクラスを使用する必要があるかもしれません。
マリウス

2

これが、Magentoが新しいプラットフォームへのアスペクト指向アプローチを生成する方法です。実際に動的にディスパッチする代わりに、「イベント」の前後、前後を生成することによって。これにより、プログラマにとっての利便性とプラットフォームのパフォーマンスのバランスが取れます。

自動依存性注入などの一部の手法は、リフレクションを介して実行されるのではなく、生成されたクラスにフラット化されます。これも、パフォーマンスを向上させる手法です。


「なぜ?」を説明していただきありがとうございますが、私の主な質問は「何ですか」でした。そしてどこに?"。
マリウス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.