コアJ2EEパターン - Dispatcher Viewパターン
2008/07/27 21:34Update
Dispatcher View(ディスパッチャ・ビュー)パターンは コアJ2EEパターン の一つ、Front Controller(フロント・コントローラー)とView(ビュー)の間にDispatcher(ディスパッチャ)と呼ばれるコンポーネントを追加し、ビューの管理、ビューの選択などの処理が委譲され、プレゼンテーション層とビジネスロジックを分離します。
本文は「問題」、「解決策」、「戦略」、「メリット」などからDispatcher Viewパターンについて説明します。
Front ControllerパターンとView Helperパターンを用いたWEBアプリケーションでは、Front Controllerはリクエストを集中管理する役割を果たし、ビューのナビゲーション、認証、セッション管理などの共通処理を行います。
View Helperはビジネスデータ・アダプタという役割で、データ収集・データ形式の変換などを行います。
しかし、アクセス制御や、ビューの管理、コンテンツの取得などを一元管理できるコンポーネントが存在しません。その結果、それらの処理コードをビューに散在してしまいます。
Combine a controller and dispatcher with views and helpers to handle client requests and prepare a dynamic presentation as the response. Controllers do not delegate content retrieval to helpers, because these activities are deferred to the time of view processing. A dispatcher is responsible for view management and navigation and can be encapsulated either within a controller, a view, or a separate component.
コントローラ、ディスパッチャとビューや、ヘルパーを組み合わせてクライアントからのリクエストを処理し、ダイナミックなプレゼンテーションをレスポンスします。
◇ コンテンツの取得はビューを処理するまで遅延されますので、コントローラは、コンテンツの取得をヘルパーに委譲しません。
◇ ディスパッチャはビューの管理やナビゲーションなどの責務を持ちます。
◇ ディスパッチャはコントローラや、ビューの内部で実装するか、独立なコンポーネントとして実装することができます。
<<図1:構造>>

<<図2:責務>>

Controller:コントローラ
リクエストを集中して管理します。ビューのナビゲーション、認証、セッション管理などの共通処理を行います。
Dispatcher:ディスパッチャ
ビューの管理やナビゲーションを行います。
View:ビュー
プレゼンテーション・ロジック
Helper:ヘルパー
データ収集・データ形式の変換などを行います。一つのビューに複数のヘルパーを配置することができます。
◇ プレゼンテーション・ロジックとビジネス・ロジックの分離
◇ 共通する処理を集約し、再利用が可能
Dispatcher Viewerパターンは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
コントローラの内部でディスパッチャが実装される戦略
◇ Dispatcher in View Strategy
ビューの内部でディスパッチャが実装される戦略
◇ Transformer Helper Strategy
ヘルパーはeXtensible Stylesheet Language Transformer(XSLT)として実装される戦略
Front Controller
と View Helper 
Dispatcher ViewerパターンはFront ControllerとView Helperの組み合わせです。
Service to Worker
Service to WorkerはDispatcher Viewerと同じく、Front ControllerとView Helperの組み合わせです。Service to Workerは制御中心としたパターンで、Dispatcher Viewerはビュー中心です。
Core J2EE Pattern Catalog 
Core J2EE Patterns - Dispatcher View
問題
Front ControllerパターンとView Helperパターンを用いたWEBアプリケーションでは、Front Controllerはリクエストを集中管理する役割を果たし、ビューのナビゲーション、認証、セッション管理などの共通処理を行います。
View Helperはビジネスデータ・アダプタという役割で、データ収集・データ形式の変換などを行います。
しかし、アクセス制御や、ビューの管理、コンテンツの取得などを一元管理できるコンポーネントが存在しません。その結果、それらの処理コードをビューに散在してしまいます。
解決策
Combine a controller and dispatcher with views and helpers to handle client requests and prepare a dynamic presentation as the response. Controllers do not delegate content retrieval to helpers, because these activities are deferred to the time of view processing. A dispatcher is responsible for view management and navigation and can be encapsulated either within a controller, a view, or a separate component.
コントローラ、ディスパッチャとビューや、ヘルパーを組み合わせてクライアントからのリクエストを処理し、ダイナミックなプレゼンテーションをレスポンスします。
◇ コンテンツの取得はビューを処理するまで遅延されますので、コントローラは、コンテンツの取得をヘルパーに委譲しません。
◇ ディスパッチャはビューの管理やナビゲーションなどの責務を持ちます。
◇ ディスパッチャはコントローラや、ビューの内部で実装するか、独立なコンポーネントとして実装することができます。
<<図1:構造>>
<<図2:責務>>
Controller:コントローラ
リクエストを集中して管理します。ビューのナビゲーション、認証、セッション管理などの共通処理を行います。
Dispatcher:ディスパッチャ
ビューの管理やナビゲーションを行います。
View:ビュー
プレゼンテーション・ロジック
Helper:ヘルパー
データ収集・データ形式の変換などを行います。一つのビューに複数のヘルパーを配置することができます。
メリット
◇ プレゼンテーション・ロジックとビジネス・ロジックの分離
◇ 共通する処理を集約し、再利用が可能
戦略
Dispatcher Viewerパターンは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
コントローラの内部でディスパッチャが実装される戦略
◇ Dispatcher in View Strategy
ビューの内部でディスパッチャが実装される戦略
◇ Transformer Helper Strategy
ヘルパーはeXtensible Stylesheet Language Transformer(XSLT)として実装される戦略
関連パターン
Front Controller
と View Helper 
Dispatcher ViewerパターンはFront ControllerとView Helperの組み合わせです。
Service to Worker
Service to WorkerはDispatcher Viewerと同じく、Front ControllerとView Helperの組み合わせです。Service to Workerは制御中心としたパターンで、Dispatcher Viewerはビュー中心です。
その他参考資料
Core J2EE Pattern Catalog 
Core J2EE Patterns - Dispatcher View
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)