13

DIたちが持っているとき、何のために、そのユースケースは何ServiceManagerですか?

zend-di両方の構成ファイルでとzend-servicemanagerなどのいくつかのオプションを設定できるため、それらは似ているようaliasesに見えますinvokables

これらのコンポーネントの舞台裏で何が起こっているのかをよりよく理解しようとしていますが、ドキュメントでは十分な情報が得られませんでした。

Diの違いと、の代わりに使用する必要がある場合を教えてくださいServiceManager

4

3 に答える 3

15

Zend \ DIは、サービスマネージャーがユーザー提供のファクトリを使用している間、依存関係を検出して注入するために、リフレクションなどの魔法に依存しています。それが主な違いです。

複雑さ、デバッグ、パフォーマンスの問題により、コミュニティではSMを優先して非推奨になりました。RADには良いはずですが、正しく使用するには平均以上の知識が必要です。

一方、SMにはかなり冗長で明示的な配線があり、1年後にコードを開いて、何が起こっているのかを簡単に把握できます。

于 2012-11-06T21:04:52.750 に答える
6

Zend\Diはクラスを一緒に配線しますZend\ServiceManagerが、 は手動で配線し、インスタンス化するすべてのクラスのファクトリ クロージャーを作成する必要があります。

Zend\ServiceManager遅いReflection APIに依存しないため、はるかに高速です。一方、数百のクラスを持つ大規模なアプリケーションのクロージャを記述するのは非常に面倒です。クロージャーを最新の状態に保つことは、アプリケーションが大きくなるにつれて難しくなります。

この問題に対処するために、ZendDiCompilerという Zend Framework 2 モジュールを作成しました。コードZend\Diをスキャンし、ファクトリ コードを自動生成してクラスをインスタンス化します。のパワーZend\Diとパフォーマンスの両方のコンポーネントを最大限に活用できZend\ServiceManagerます。

ZendDiCompilerのドキュメントにはかなりの労力を費やしており、いくつかの簡単で高度な使用例も提供されています。

于 2013-03-09T20:29:12.833 に答える