コアJ2EEパターン - Service to Workerパターン
2008/07/27 22:27Update
Service to Worker(ディスパッチャ・ビュー)パターンは コアJ2EEパターン の一つ、Front Controller(フロント・コントローラー)とView(ビュー)の間にDispatcher(ディスパッチャ)と呼ばれるコンポーネントを追加し、ビューの管理、ビューの選択などの処理が委譲され、プレゼンテーション層とビジネスロジックを分離します。
本文は「問題」、「解決策」、「戦略」、「メリット」などからService to Workerパターンについて説明します。
問題
Front ControllerパターンとView Helperパターンを用いたWEBアプリケーションでは、Front Controllerはリクエストを集中管理する役割を果たし、ビューのナビゲーション、認証、セッション管理などの共通処理を行います。
View Helperはビジネスデータ・アダプタという役割で、データ収集・データ形式の変換などを行います。
しかし、アクセス制御や、ビューの管理、コンテンツの取得などを一元管理できるコンポーネントが存在しません。その結果、それらの処理コードをビューに散在してしまいます。
解決策
Combine a controller and dispatcher with views and helpers (see "Front Controller" on page 172 and "View Helper" on page 186) to handle client requests and prepare a dynamic presentation as the response. Controllers delegate content retrieval to helpers, which manage the population of the intermediate model for the view. A dispatcher is responsible for view management and navigation and can be encapsulated either within a controller or a separate component.
コントローラ、ディスパッチャとビューや、ヘルパーを組み合わせてクライアントからのリクエストを処理し、ダイナミックなプレゼンテーションをレスポンスします。
◇ コントローラはコンテンツの取得(content retrieval)をビューの表示用データを保持するためのヘルパーに委譲します。
※この点について、Dispatcher Viewと異なりますので、ご注意ください。Dispatcher Viewでは、コンテンツの取得はビューを処理するまで遅延されますので、コントローラは、コンテンツの取得をヘルパーに委譲しません。
◇ ディスパッチャはビューの管理やナビゲーションなどの責務を持ちます。
◇ ディスパッチャはコントローラの内部で実装するか、独立なコンポーネントとして実装することができます。
<<図1:構造>>
Dispatcher ViewはService to Workerと同じく、Front ControllerとView Helperの組み合わせです。Service to Workerは制御中心としたパターンで、Dispatcher Viewはビュー中心です。また、上の構造図と「Dispatcher View」の構造図を比較見れば分かると思います、Dispatcher Viewでは、ヘルパーを参照するのはビューだけとなっていますが、Service to Workerは、ビューのほか、コントローラや、ディスパッチャからもヘルパーを参照することができます。
<<図2:責務>>
Controller:コントローラ
リクエストを集中して管理します。ビューのナビゲーション、認証、セッション管理などの共通処理を行います。
Dispatcher:ディスパッチャ
ビューの管理やナビゲーションを行います。ディスパッチャはコントローラとして動作することも、独立なコンポーネントとしてもできます。
View:ビュー
プレゼンテーション・ロジック
Helper:ヘルパー
データ収集・データ形式の変換などを行います。一つのビューに複数のヘルパーを配置することができます。
メリット
◇ プレゼンテーション・ロジックとビジネス・ロジックの分離
◇ 共通する処理を集約し、再利用が可能
戦略
Service to WorkerパターンはFront ControllerとView Helperの組み合わせで、各部分の実装方法によって、次のような戦略があります。
◇ Servlet Front Strategy
フロント・コントローラはサーブレット として実装される戦略
◇ JavaServer Pages Front Strategy
フロント・コントローラはJSP として実装される戦略
◇ JSP View Strategy
ビューにJSPの実装戦略
◇ Servlet View Strategy
ビューにサーブレットの実装戦略
◇ JavaBean Helper Strategy
ヘルパーにJavaBeanの実装戦略
◇ Custom Tag Helper Strategy
ヘルパーはカスタム・タグとして実装される戦略
◇ Dispatcher in Controller Strategy
コントローラの内部でディスパッチャが実装される戦略
◇ Transformer Helper Strategy
ヘルパーはeXtensible Stylesheet Language Transformer(XSLT)として実装される戦略
関連パターン
Front Controller
と View Helper 
Service to WorkerパターンはFront ControllerとView Helperの組み合わせです。
Dispatcher View

Dispatcher ViewはService to Workerと同じく、Front ControllerとView Helperの組み合わせです。Service to Workerは制御中心としたパターンで、Dispatcher Viewはビュー中心です。
その他参考資料
Core J2EE Pattern Catalog 
Core J2EE Patterns - Service to Worker
Sponsored Link
- Relative Articles
- ASP.NETでのフロント・コントローラ(Front Controller)実装 - (2009/10/20 15:22)
- Factory Method パターン - ファクトリメソッドパターン - (2008/06/09 22:44)
- Abstract Factory パターン - 抽象ファクトリパターン - (2008/06/10 13:25)
- Singleton パターン - シングルトンパターン - (2008/06/10 15:36)
- Prototypeパターン - プロトタイプパターン - (2008/06/10 17:23)
- Builderパターン - ビルダーパターン - (2008/06/10 19:01)
- Adapter パターン - アダプターパターン - (2008/06/11 11:30)
- Composite パターン - コンポジットパターン - (2008/06/11 16:59)
- Interpreter パターン - インタプリタパターン - (2008/06/13 15:42)
- Chain of Responsibility パターン - 責任の連鎖パターン - (2008/06/14 00:28)