フロントコントローラ ソフトウェア設計パターンは、いくつかのパターンカタログに記載されており、Webアプリケーションの設計に関連しています。これは「Webサイトへのすべてのリクエストを処理するコントローラ」[1]であり、Webアプリケーション開発者がコードの冗長性なしに柔軟性と再利用性を実現するための便利な構造です。
命令

フロント コントローラーは、Web アプリケーションでワークフローを実装するためによく使用されます。厳密には必須ではありませんが、個々のページにナビゲーションの責任を割り当てるよりも、フロント コントローラーから一連の関連ページ (たとえば、オンライン購入で使用される複数のページ) 間のナビゲーションを制御する方がはるかに簡単です。
フロント コントローラは、 Javaオブジェクトとして実装することも、Webセッションのリクエストごとに呼び出されるPHP、Raku、Python、Rubyなどのスクリプト言語のスクリプトとして実装することもできます。このスクリプトは、セッション処理、キャッシュ、入力フィルタリングなど、アプリケーションまたはフレームワークに共通するすべてのタスクを処理します。特定のリクエストに基づいて、さらにオブジェクトをインスタンス化し、必要なタスクを処理するメソッドを呼び出します。
フロント コントローラーの代替として、各サイト ページまたはパスにマップされたページ コントローラーを使用する方法があります。これにより、各コントローラーに重複したコードが含まれる可能性がありますが、ページ コントローラー アプローチでは高度な特化が実現されます。
例
いくつかの Web 層アプリケーション フレームワークは、フロント コントローラー パターンを実装しています。
- アパッチストラッツ
- ASP.NET の Web サイト
- Adobe FlexのCairngormフレームワーク
- rakuの Cro または Bailador フレームワーク
- ドルパル
- Yii、CakePHP、Laravel、Symfony、CodeIgniter、LaminasなどのPHPで書かれたMVCフレームワーク
- スプリングフレームワーク[2]
- Yesod、Haskellで書かれた
実装
フロント コントローラーは、次の 3 つのコンポーネントに分けられます。
- XMLマッピング: リクエストを、リクエスト処理を処理するクラスにマッピングするファイル。
- リクエスト プロセッサ: リクエストの処理と適切なモデルの変更または取得に使用されます。
- フロー マネージャー: 次のページに何が表示されるかを決定します。
参加者と責任
Java実装例
Javaコードで実装されたフロントコントローラ: [3]
プライベートvoid doProcess ( HttpServletRequestリクエスト、
HttpServletResponseレスポンス)
IOException 、ServletExceptionをスローします。
...
試す{
getRequestProcessor () を実行します。processRequest ( )リクエスト);
getScreenFlowManager (). forwardToNextScreen (リクエスト、レスポンス);
}キャッチ( Throwable ex ) {
文字列className = ex.getClass (). getName ( ) ;
nextScreen = getScreenFlowManager (). getExceptionScreen ( ex );
// リクエストに例外を入れる
リクエスト.setAttribute ( "javax.servlet.jsp.jspException" , ex ) ;
次の画面がnullの場合
// 一般的なエラー画面に送信
例: printStackTrace ();
新しいServletExceptionをスローします( "MainServlet: 不明な例外: " +
クラス名);
}
}
利益と責任
フロントコントローラパターンには主に3つの利点があります。[4]
- 集中制御。フロント コントローラーは、 Web アプリケーションへのすべてのリクエストを処理します。複数のコントローラーの使用を回避するこの集中制御の実装は、ユーザー追跡やセキュリティなどのアプリケーション全体のポリシーを適用するのに適しています。
- スレッド セーフティ。新しい要求を受信すると新しいコマンド オブジェクトが生成されますが、コマンド オブジェクトはスレッド セーフではありません。したがって、コマンド クラスでは安全です。スレッドの問題が収集されると安全性は保証されませんが、コマンドと対話するコードは依然としてスレッド セーフです。
- 構成可能性。Web アプリケーションではフロント コントローラーが 1 つだけ使用されるため、アプリケーションの構成は大幅に簡素化されます。ハンドラーがディスパッチの責任を共有するため、コードを変更することなく新しいコマンドを追加できます。
フロント コントローラー パターンでは、単一のコントローラーが大量の作業を実行するためパフォーマンスの問題が発生する可能性があり、データベースまたはドキュメント クエリが関係する場合はハンドラーがボトルネックを引き起こす可能性があります。フロント コントローラーのアプローチは、ページ コントローラーのアプローチよりも複雑です。
MVCとの関係
- システムの信頼性と保守性を向上させるには、システム全体で使用される共通ロジックが関係する場合は、重複したコードを避けて集中化する必要があります。
- アプリケーションのデータは 1 か所で処理するのが最適であり、重複したデータ取得コードの必要性を排除します。
- テスト容易性を高めるには、モデル ビュー コントローラ(MVC) パターンのさまざまな役割を分離する必要があります。これは、MVC パターンのコントローラ部分にも当てはまります。
比較
ページ コントローラー パターンは、MVC モデルのフロント コントローラー アプローチの代替手段です。
参照
- デザインパターン(コンピュータサイエンス)。
- メディエーター パターン(注: フロント コントローラー パターンは、メディエーター パターンの特殊な種類です)
参考文献
- ^ Fowler, Martin . 「Front Controller」 . 2017年9月26日閲覧。
- ^ 「Web MVCフレームワーク」。Spring Frameworkリファレンスドキュメント。Pivotal Software 。 2017年9月26日閲覧。
- ^ 「Java のデモ コード」。2012 年 4 月 19 日時点のオリジナルよりアーカイブ。
{{cite web}}: CS1 maint: bot: 元の URL ステータス不明 (リンク) - ^ 「フロント コントローラーを使用する利点」。2014 年 3 月 17 日。
注記
- Alur, Deepak、John Crup、Dan Malks (2003)。コア J2EE パターン、ベスト プラクティスおよび設計戦略、第 2 版。Sun Microsystems Press。650 ページ。ISBN 0-13-142246-4。
- Fowler, Martin (2003)。エンタープライズ アプリケーション アーキテクチャのパターン。Addison-Wesley Professional。560 ページ。ISBN 978-0-321-12742-6。
外部リンク
- Bear Bibeault の Front Man™ は、軽量な Java 実装です。
