「駑馬十駕」 IT系情報を中心に調べた事をコツコツ綴っています。

Webアプリケーションを作成する上で重要になってくるのがMVCと呼ばれるソフトウェア設計モデルです。

MVCとは

  • ソフトウェアを「Model」・「View」・「Controller」という3要素の組み合わせでシステムを実装する方式です。

MVCモデルのイメージ

MVCモデルのイメージ

  • Model

    • Modelは、システムの中で処理の中核を担うビジネスロジック(アプリケーションが扱う領域のデータと手続き)を担当するシステムの本体部分に当たります。
    • データベースなどに格納された生のデータを隠蔽し、抽象化された形のAPIを通じて他のモジュールからのアクセスをコントロールするモジュールです。
    • Modelは入出力や表示といった処理は行わず、業務モデルの実装といった部分を担当します。
    • アプリケーション特有のルールやロジック(ビジネスロジック)を持ち、データの整合性に絶対の責任を持ちます。
    • データの変更をViewに通知するのもModelの責任となります。(Modelの変更を通知するのにObserverパターンが用いられることもあります)。
    • 多くのアプリケーションではデータの格納に永続的な記憶の仕組み(データベースなど)が使われています。
    • MVCの概念では、データの(UI以外の)入出力は取り扱わないので、データアクセスも本来MVCの概念の範疇を超えるものではありますが、敢えて言えばModelの中に隠蔽されると考えられます。
    • J2EEでは JavaBeans、EJBがモデルを担当します。
    • サーバサイドでいうserviceに関する処理を行なっています。
  • View
    • Viewは、表示、入出力といった部分を担当します。
    • Modelのデータを取り出してユーザが見るのに適した形で表示する要素です。
    • UIへの出力を担当します。
    • Modelが提供する抽象化されたデータを、どのような形式で人へ見せるのかを記述したモジュールです。
    • GUIアプリケーションの場合、使用するGUI部品や画面上のレイアウトを指定します。
    • 必要な情報をModelから取り出して画面へ表示させる為の処理を行います。
    • J2EEではServletやJSPで実装します。
    • 一般的な HTML表示に関してはJSP、そのほかの特殊なデータ(バイナリデータ)を出力する場合は Servletを用いるのが標準的な使用方法となります。
  • Controller
    • コントローラは、ViewとModelを制御します。
    • 自分自身では表示を行ったりロジックの実行は行わず、Viewからの入力に応じて、必要なロジックの実行をModelに依頼し、その結果表示をViewに依頼します。
    • ユーザの入力(通常イベントとして通知されます)に対して応答し、それを処理する要素です。
    • UIからの入力を担当します。
    • ViewとModelの間に位置して、ユーザーにどんな順序でデータを見せて行くとか、Viewを通したユーザーからの入力をModelへのAPIコールへとマッピングするのがこのモジュールの役割となります。
    • ModelとViewに変更を引き起こす場合もありますが、直接描画を行ったり、Modelの内部データを直接操作したりはしません。
    • J2EEではServletでControllerを実装します。
    • イベントはコントローラで受け取り、画面上構成するボタン(イベント)の数だけ処理があります。

MVCモデルのメリット

  • 並行開発
    機能毎の分離が明確になることにより独立性が確保出来る。
    ・開発の分業が可能になる
    ・専門家を配置しクオリティーを上げる事が可能になる
  • 再利用性
    コンポーネント間の依存性が最小限に抑えられる為、他の部分の影響を受けにくい。
    ・コンポーネントの再利用がしやすくなる
    ・他のコンポーネントの変更が原因で、複数の担当者が同一のソースに対してメンテナンスを行う、というような事態を避けることもでき、保守性も確保される

Ads by Google

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">