Menu

* キーワード [#id4595a1]
- Webアプリケーション
- リクエスト

* 何か [#w2634f71]

 たったひとつの入口

すべてのリクエストを一旦受け付けます。受け付けた後、リクエストの内容に応じてコマンドを選択してアプリケーション処理を委譲します。ハンドラ。

* なぜか [#c149caa1]

複雑なWebサイトになるといたるところで似通った処理をするようになります。セキュリティに関することやローカリゼーションなどです。リクエストの入口をひとつにすることで、これらの処理を1箇所にまとめることができます。コードの重複を回避できます。また、Javaにおいてはスレッドセーフでないサーブレット処理をコマンド(オブジェクト)に委譲することでスレッドセーフであることを気にしなくてよくなります。

- コード重複の回避
- スレッドセーフ(Java/Servlet)

コード重複の回避については注意が必要です。共通化という名目のもと多くの処理をフロントコントローラに寄せ過ぎてしまうと、フロントコントローラが肥大化してしまいます。フロントコントローラの役割はあくまでコマンドの選択に留めておきましょう。選択されたコマンドがフロントコントローラを制御したくなるようなら寄せ過ぎです。そうならない限りにおいてならばよいでしょう。

* どのように [#c5a5a61d]

Javaにおいてはweb.xmlにてすべてのURLパターンをひとつのサーブレットにマップします。PHPにおいては.htaccessにてすべてのURLパターンをひとつのphpファイルにマップすることができます。

* 関連 [#hfdb6019]
- 
- 

* 参考 [#d873db23]
- [[>P of EAA: Front Controller>http://www.martinfowler.com/eaaCatalog/frontController.html]]
- [[フロントコントローラ - Strategic Choice>http://d.hatena.ne.jp/asakichy/20120627/1340748302]]
- [[PHP10行で作る超シンプルフレームワーク - かってぃのブログ | choilog [チョイログ]>http://choilog.com/katty0324/blog/6]]