私はあなたのためにZF2のマネージャーとサービスを分解しようとします。
マネージャー
残念ながら、クラスを参照する「マネージャー」という単語は非常にあいまいであり、ZF2内では、この単語の使用方法に少し矛盾があります。したがって、ZF2の「マネージャー」が何であるかについての信頼できる定義は本当にありません。現在、ZF2の「マネージャー」は次のように分類するのが最適です。
- ServiceManager —のインスタンス
Zend\ServiceManager\ServiceManager
。複数のServiceManagerインスタンスが存在する可能性があります。デフォルトでは、「メイン」サービスマネージャーのみが存在し、「services」構成キーまたはモジュールのgetServiceConfig()メソッドによって返される配列によって構成されます。
- プラグインマネージャー—これらはいくつかの特殊な機能
Zend\ServiceManager\PluginManager
で拡張されます。Zend\ServiceManager\ServiceManager
これらはフレームワーク内の多くのコンポーネントに分散されており、以前はプラグインローダー/ブローカーとして知られていた機能(以前のバージョンのZF2)を提供します。これらのプラグインマネージャーは、ビューヘルパー、コントローラープラグイン、コントローラー自体などを初期化するものです。
- その他の「マネージャー」 —
Zend\ModuleManager\ModuleManager
やのようなものZend\Session\SessionManager
。これらはServiceManagerとは何の関係もありませんが、名前のサフィックスとして「Manager」が付いているだけです。
特定の定義を念頭に置いて設計されていない用語(マネージャー)に定義を割り当てようとすると、混乱するかもしれません。の作者としてZend\ModuleManager
、私はもともとコンポーネントを次のように開発したと言うことができますZend\Module
(私は本当にマネージャーを接尾辞として好きではありません)。毎週開催されるIRCミーティングの1つで、Zend\Module
あいまいであり、「マネージャー」という接尾辞を付けることで、そのあいまいさをなんとか解決できることが決定されました。明らかに、私はその問題に反対票を投じました。私のポイントは、Zend\ModuleManager
定義上、「マネージャー」であるという仕様に合わせて開発されたものではないということです。
サービス
ZF2では、に関してZend\ServiceManager
、「サービス」は単なるオブジェクトです(技術的には配列にすることもできます)。ServiceManagerコンポーネントは、アプリケーションが必要とする可能性のあるさまざまな「サービス」(オブジェクト)の単純なKey-Valueレジストリと考えることができます。これらの「サービス」は通常、構成済みのメーラー、ロガー、データベースアダプター、アプリケーション構成などです。もちろん、ServiceManagerは単なるレジストリではなく、その主な機能は、サービス(およびその依存関係)のインスタンス化を次のように延期することです。それらは実際に必要です。別名遅延読み込み); ServiceManagerのさまざまな機能を詳細に説明するブログ投稿を作成しました。
$ this-> getServiceLocator()-> get('managerName)を使用してManagerにアクセスできるように、誤ってManagerを作成してServiceManagerにファクトリを提供することに慣れました。
この場合、ここで「マネージャー」という用語と「サービス」という用語を混同している可能性があると思います。ServiceManagerに登録されているものは、単に「サービス」と呼ばれることがあります。実際、ある種の「マネージャー」をサービスとして登録できるため、これは混乱を招く可能性があります。たとえば、のインスタンスである「セッション」サービスを持つことができますZend\Session\SessionManager
。「サービス」という用語は一般にサービス層の一部を構成するクラスを指すため、さらに混乱が生じます。
したがって、残念ながら、はい、ZF2の用語は少し曖昧になる可能性がありますが、いくつかの比較的単純なコアコンセプトを理解すると、優れたデザインは、他のほとんどの製品とは比べものにならない驚くべき柔軟性を実際に開きます。そこにある既存のフレームワーク。
お役に立てれば。