7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[ZF2] ServiceとManagerの違い

Last updated at Posted at 2013-05-23

ZF2で「SessionManagerをServiceとしてServiceManagerに登録する」みたいな処理をしている内に、ServiceとManagerの違いが分からなくなってきたので、ちょっと整理。

Service

何らかの機能を提供する、複雑な状態を持たないオブジェクト。
何らか、の部分は何でもいい。
たとえばログの出力だったり各種設定の管理だったりする。

複雑な状態を持たないため、Entityのようにいちいち生成すると資源の無駄遣い。
なのでServiceManagerに登録することで、アプリケーション中で使い回せるようになっている。

Manager

読んで字のごとく、何かの管理を担当するオブジェクト。
何か、の部分にはServiceやModule、セッション、プラグイン(Helper)などが該当する。

ソフトウェアアーキテクチャ上でManagerという何か特殊な役割を持ったコンポーネントが存在するわけではない。

  • ServiceManager
    • Serviceを管理する。
    • 必要に応じてServiceを生成し、生成したServiceを使い回せるように保存しておいたりする。
  • ModuleManager
    • Moduleを管理する。
    • Moduleをロードし、各種Moduleイベントを発生させる。
  • SessionManager
    • セッションを管理する。
    • セッションの開始や破棄など、セッションを操作するための機能を提供する。

上記の例においてServiceManagerは「Serviceを管理する、という機能を提供するService」ではあるが、その役割上、他のServiceとは異なりアプリケーション中に単一のインスタンスしか存在し得ない。

一方、ModuleManagerやSessionManagerは「何かを管理する機能を提供するService」としてServiceManagerに登録し、アプリケーション中で単一のインスタンスを使い回す、ということがありえる ※。

※ 別にServiceManagerに登録しなくてもいいけど、全く同じManagerを複数箇所で利用する場合はいちいちnewするよりも登録しといたほうが効率がいい。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?