アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 連載 » ZendFrameworkで作る『イマドキ』のWebアプリケーション » 第6回 MVCパターン

ZendFrameworkで作る『イマドキ』のWebアプリケーション

第6回 MVCパターン

はじめて作ったZend Frameworkアプリケーションは,まだまだZend Frameworkを利用したアプリケーションらしい,と言うには程遠い状態です。その理由の一つがMVCパターンを利用していない点です。

MVCパターンとは

MVCパターンとはアプリケーション構築のデザインパターンの一つで,ロジックを記述した「モデル」,ユーザへの表示を行う「ビュー」,ユーザからの操作を受け付ける「コントローラ」の三つに分解してアプリケーションを作っていくデザインを言います。モデル(Model),ビュー(View),コントローラー(Controller)の頭文字をとって,MVCパターン,MVCモデルと呼ばれています。

図1 MVCパターン

図1 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アプリケーションにお勧めできるデザインパターンです。

この連載で作ったゲストブックアプリケーションはまだモデルを分離していません。次の回ではゲストブックにモデルを追加します。

著者プロフィール

大垣靖男(おおがきやすお)

University of Denver卒。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て,エレクトロニック・サービス・イニシアチブ有限会社を設立。
オープンソース製品は比較的古くから利用し,Linuxは0.9xのころから利用している。オープンソースシステム開発への参加はエレクトロニック・サービス・イニシアチブ設立後から。PHPプロジェクトでは,PostgreSQLモジュールのメンテナンスを担当している。

URLhttp://blog.ohgaki.net/

著書

  • Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?

    Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?

  • [改訂版]PHPポケットリファレンス

    [改訂版]PHPポケットリファレンス

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

キーパーソンが見るWeb業界

本連載はWeb Site Expert/gihyo.jpとの連動企画です。阿部淳也, 長谷川敦士, 森田雄のお三方による,Web業界をテーマにした座談会です。

きたみりゅうじの聞かせて珍プレー

ソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。みなさんからの投稿もお待ちしてます!

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

まだ間に合う「ITパスポート」受験対策 原山先生の短期合格塾

この連載では,4月18日のITパスポート試験の受験に向けて,短い期間で効率良く受験対策を行う方法や,確実に得点するための裏ワザなどを伝授していきます。

Ubuntu Weekly Recipe

Ubuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。

C/C++プログラマのためのDTrace入門

よくカーネルのチューニングや解析で活用されるDTraceですが,実はユーザプログラムの開発においても非常に有用です。連載ではC/C++プログラマやテストに関わる方向けにDTraceの使い方を解説します。

Blogopolisから学ぶ計算幾何

計算幾何学は,図形に関するアルゴリズムを研究するコンピュータサイエンスの一分野です。本連載では,ビジュアルブログ検索エンジン「Blogopolis」で採用されている計算幾何のアプローチを例に取り上げながら,計算幾何の初歩を実践的に学習します。

検索エンジンはいかにして動くのか?

本連載では, 今や誰もが利用している検索エンジンの中身を,全体の仕組みやデータ構造,アルゴリズムから分散インデックスまで,最近の研究事例も交えて紹介します。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス