はじめて作ったZend Frameworkアプリケーションは、まだまだZend Frameworkを利用したアプリケーションらしい、と言うには程遠い状態です。その理由の一つがMVCパターンを利用していない点です。
MVCパターンとは
MVCパターンとはアプリケーション構築のデザインパターンの一つで、ロジックを記述した「モデル」、ユーザへの表示を行う「ビュー」、ユーザからの操作を受け付ける「コントローラ」の三つに分解してアプリケーションを作っていくデザインを言います。モデル(Model)、ビュー(View)、コントローラー(Controller)の頭文字をとって、MVCパターン、MVCモデルと呼ばれています。
MVCパターンとWebアプリケーション
元々MVCパターンはGUIアプリケーション用に考案されたデザインパターンでした。MVCパターンがWebアプリケーションに適用され始めた頃は、MVCパターンをWebアプリケーションに適用するには無理があるといった考え方を持つ開発者も少なくありませんでした。
MVCパターンがWebアプリケーションに有効に適用できないと考えた理由はいくつかあります。代表的な理由はアプリケーションの継続性の違い、アプリケーションの複雑性の違いです。
アプリケーションの継続性
GUIアプリケーションと違い、Webアプリケーションには継続性がありません。エラーなく処理が終了する場合、ユーザからのリクエストを受け付けてそれに対する結果を返す(レスポンス)だけです。Webアプリケーションはリクエスト・レスポンスのたびに起動・終了しても構いません。しかし、GUIアプリケーションであれば一つのリクエストを受け付け処理するたびにアプリケーションを起動・終了するわけには行きません。
Webアプリケーションの場合、クライアント用のGUIアプリケーションと違ってエラーが発生した場合はアプリケーションの実行を継続する必要がありません。エラーページを出力してプログラム自体は終了しても構いません。一方、GUIアプリケーションでエラーが発生するたびに、アプリケーションが終了してしまうようでは使い物になりません。
継続して処理する必要が無いため、GUIアプリケーションと異なり、MVCモデルを利用しなくてもアプリケーション構築は容易に行えます。
アプリケーションの複雑性
GUIアプリケーションは非同期のユーザからのリクエストに対して、適切な処理を行い、ビュー(アプリケーション画面)を更新しなければなりません。この処理はWebアプリケーションと比べると非常に複雑な処理を必要とします。GUIアプリケーションは非同期にやってくる複数のリクエストに対して適切な処理も行わなければなりません。Webアプリケーションはリクエストは一つだけ、リクエストの処理中にほかの処理のリクエストが送信されてくることはありません。ブラウザが複数のリクエストを送信してくることはありますが、リクエストは一つのメッセージとして処理されるので、Webアプリケーションは非常にシンプルです。
WebアプリケーションはGUIアプリケーションに比べ非常にシンプルです。実際、簡単なWebアプリケーションを手早く作るには、MVCパターンを使わないほうがソースコードの見通しもよく、効率よく実行できます。
MVCパターンの有効性
Webアプリケーションには継続性も必要なく、非常に単純であるなら、わざわざ面倒で遅くなってしまうMVCパターンなど利用しないでWebアプリケーションを作ればよいではないか?と思われるかもしれません。WebアプリケーションにMVCパターンを適用することには、デメリットを上回るメリットがあります。MVCモデルを利用するとセキュリティ、開発効率、メンテナンス性、テスト性の向上が期待できます。
セキュアなWebアプリケーション構築にMVCモデルは必須ではありませんが、MVCモデルは役立ちます。入力値のバリデーションを強制したり、出力時のエスケープ処理が正しく行われていることを強制することが容易になります。
大規模なWebアプリケーションを複数の開発者が作っている場合にも、モデルやビューを別々に開発するなど、MVCモデルを利用すると役割分担が容易になり効率的にWebアプリケーションを開発できるようになります。
Webアプリケーションフレームワークが用意したMVCモデルに従って開発されたアプリケーションであれば、アプリケーションに追加、変更が必要となった場合にアプリケーション全体の把握をしなくても必要な部分の修正だけで済むようになります。例えば、PC用に開発したアプリケーションを携帯に対応させる場合、ビューを用意してコントローラで必要な判定を行わせて適切なビューに切り替えるだけで携帯に対応したアプリケーションに作りかえる等の作業が容易になります。
現在のWebアプリケーション開発ではTDD(Test Driven Development)を採用するケースが増えてきています。ビジネスロジックをビューとコントローラから分離することにより、テストの自動化も容易になります。
まとめ
MVCパターンにはデメリットもあるが、現在ではWebアプリケーションにおいても十分メリットがあるデザインパターンだと認識されています。特殊な例外を除けば、ほぼすべてのWebアプリケーションにお勧めできるデザインパターンです。
この連載で作ったゲストブックアプリケーションはまだモデルを分離していません。次の回ではゲストブックにモデルを追加します。