私の ZF2 アプリケーションでは、Zend\Di\Di
すべてのクラス インスタンスを作成するために使用します。DI 定義はZend\Di\Definition\CompilerDefinition
、APC を使用してスキャンおよびキャッシュされます。これにより、遅いリフレクションを使用して実行時にクラスをスキャンすることを回避できます。インスタンスの作成中に例外が発生した場合 (DI 定義が古いため)、コードが再スキャンされ、定義がキャッシュされ、インスタンスが再度作成されます。
これは、新しいクラスまたは変更されたコンストラクターに対してファクトリーメソッド/クロージャーを作成または変更する必要がないため、開発中に非常に便利です。私のコンストラクターは、追加のコンストラクター パラメーターを指定せずに依存性注入が確実に機能するように、特定の規則 (型ヒント付きの引数と単一の $params 配列のみ) に従います。
これまでのところ、これは適切に機能し、バグを回避し (古いファクトリ メソッドがない)、開発をスピードアップします。ただし、スキャンされた定義は現在、APC で 1.8MB (シリアル化された配列) であり、増加しています。リクエストごとにキャッシュからロードする必要があるため、短時間にリクエストが多すぎるとメモリが枯渇する恐れがあります。ただし、これをシミュレートするための負荷テストのセットアップはありません。
Zend\Di\Di を使用する代わりに、Zend\ServiceManager を使用してすべてのクラスにファクトリ クロージャを記述することをお勧めします。しかし、これは大変な作業であり、開発中はかなり面倒だと思います。
この状況で Zend\ServiceManager にリファクタリングすることをお勧めしますか?