回答:
異なるエンティティを生成する理由はいくつかあります。
プロキシ -遅延読み込みに使用されます。ただし、各タイプには個別のプロキシクラスが必要なので、開発者が手動で記述してMagentoが生成するのは面倒です。Yoは、プロキシへの参照のみをdi.xmlで見つけます。
ファクトリ -は、非注射剤(エンティティ)の作成に使用されるクラスです。プロキシと同じ。PHPにはまだジェネリックスがないため、開発者がボイラープレートコードを記述しないようにファクトリを自動生成します。Magentoコード全体でファクトリーと対話します。ほとんどの場合、エンティティには独自のファクトリが必要になります。コンストラクターで対応するファクトリーを要求するだけで、次の実行時またはコンパイラーの実行時に生成されます。
インターセプター -インターセプトコンポーネントによって使用されるインフラストラクチャクラスです。FlyingmanaとPhil Winkleが気づいたように、どうしてもそれらを操作するべきではありません。
オブジェクトグラフプロファイリングモードのロガーなど、他にも多数のエンティティが生成されますが、これらの3つが最も重要です。
Magento 2もコンパイルできます。コンパイルにより、DIとインターセプトが速くなります。すべてのコード生成とコンパイルは、dev / tools / Magento / Tools / Di / compiler.phpで実行できます
これが、Magentoが新しいプラットフォームへのアスペクト指向アプローチを生成する方法です。実際に動的にディスパッチする代わりに、「イベント」の前後、前後を生成することによって。これにより、プログラマにとっての利便性とプラットフォームのパフォーマンスのバランスが取れます。
自動依存性注入などの一部の手法は、リフレクションを介して実行されるのではなく、生成されたクラスにフラット化されます。これも、パフォーマンスを向上させる手法です。
Magento\Cms\Block\Block
ます\Magento\Cms\Model\BlockFactory
。コンストラクタでは、のインスタンスが使用されます。そのクラスはコードのどこにもありません。でのみ見つかりvar/generation
ます。したがって、同様のモジュールを実行している場合は、同様のクラスを使用する必要があるかもしれません。