MVCモデルという言葉の正しい意味をご存知でしょうか。アプリケーションソフトウェアを実装する際の代表的であるMVCモデルはシステム開発に携わる方であれば必ずと言って良いほどその仕組みや意味を知っておく必要があるデザインパターンです。この記事ではMVCモデルについて理解をするために歴史や分類、特徴などを簡単に解説していきます。
MVCモデルとはユーザインタフェースをもつアプリケーションソフトウェアを構築する上でプログラムの中身を整理するためのデザインパターンです。MVCという名称はModel-View-Controller(モデル・ビュー・コントローラー)の頭文字を取ったものです。
Modelはビジネスロジックとなる部分、Viewは画面の表示や入出力となる部分、ControllerはModelとViewを制御する部分となります。役割ごとに分割をしてプログラミングを実施する際に向いている手法です。
またMVCモデルを採用したフレームワークは数多く存在し、中でも代表的なものがJava言語においては『Struts』、PHP言語においては『CakePHP』、Rubyにおいては『Ruby on Rails』などが挙げられます。
M(Model)/ ビジネスロジックとなる部分
V(View)/ 画面の表示や入出力となる部分
C(Controller)/ ModelとViewを制御する部分
MVCモデルは1979年にパロアルト研究所にてトリグヴェレンスカウグ氏が考案しました。元々はオブジェクト指向プログラミング言語および統合化プログラム環境である『Smalltalk(スモールトーク)』におけるウィンドウプログラム開発のための設計指針として生まれたという背景があります。後にGUI(グラフィカルユーザーインターフェース)を持つソフトウェアの構造が複雑になりがちという課題からMVCモデルの多様性が注目を集めて多方面に広がっていきました。Webシステムにおいて応用されるようになったのは『JavaServer Pages(JSP)』にて採用されたことがきっかけで浸透していったと言われております。
1979年: パロアルト研究所にてトリグヴェレンスカウグ氏が考案
1995年: 著書『「オブジェクト指向における再利用のためのデザインパターン」』で紹介され注目を集める
1999年:『JavaServer Pages(JSP)』にて採用されWebシステムへの応用が本格化
MVCモデルの分類について見ていきましょう。
Model(モデル)とはMVCのMを表します。こちらのModelはアプリケーションの中でビジネスロジックを担当する部分です。主にデータベースとのやり取りやデータ処理を行います。Modelがデータ管理の役割を担うことで、ViewやControllerlにおいてデータ管理に関するコードを不要とすることが出来ます。そのため何かデータ管理における問題点が発生した際にModelの調査を行う必要があると判断出来ます。
・データベースとのやり取り
・データの処理(取得、作成、更新、削除)
View(ビュー)とはMVCのVを表します。こちらのViewはModelのデータを取り出してユーザーが見えるように適した表示を実現することを担当する部分です。例えばECサイトにおいて検索窓に特定の商品情報を入力し、Viewからのリクエストに応じたControllerlの処理によってデータベースから商品情報を抜き出して、Controllerlの処理によって返された商品情報をViewが表示するといったような役割を担っております。
・ユーサーが見える適した形での情報の出力
Controllerl(コントローラー)MVCのCを表します。こちらのControllerlはModelやViewへデータの受け渡しなど処理に関する仲介役を担当する部分です。ユーザーからのリクエストをViewから受け取り、Modelへのメッセージとして変換する処理を行い、Modelへリクエストを送信します。このように基本的に全ての処理の実行ルートの仲介として橋渡し役を担っております。
・ModelとViewの橋渡し役
・Viewからリクエストの受信と結果の送信
・Modelへリクエストの送信と結果の受信
MVCモデルの特徴について見ていきましょう。
MVCモデルはModel-View-Controllerとそれぞれが分類されており固有の役割を持っております。そのため作業区分が明確化されており、開発効率や課題解決効率が高まるという特徴があります。例えば課題の解決においてユーザーが見える部分となるUI(ユーザインターフェース)の出力形式に問題が生じた場合、ユーザーへの表示の役割を担当するViewの調査を行う必要があると判断出来ます。必要に応じた調査、分析そして改修という必要最低限の工数に留めることが可能です。
MVCモデルでは上述の通り作業区分が明確化されているため表示される部分(View)とデータを管理する(Model)が別れております。そのため表示される部分の改修が必要となった場合、Viewの部分だけを個別に修正・変更するということが可能です。
MVCモデルではコンポーネント間の依存性が最小限に抑えられております。そのため他の部分の実装変更による影響を受けにくいという特徴があります。コンポーネントの再利用性が高まり、保守性も確保されるというメリットが挙げられます。
MVCから派生した種類について見ていきましょう。
MVPとはModel-View-Presenter(モデル・ビュー・プレゼンター)の頭文字を取ったものです。MVCにおけるControllerl(コントローラー)とView(ビュー)の役割をより明確化するためにControllerlをPresenterに置き換えたモデルとなります。Presenter(プレゼンター)は両者の仲介役を意味します。MVPの特徴として、クラスの役割が明確になるやクラスの差し替えやテストが容易になるなどが挙げられます。
・Controllerl(コントローラー)がPresenter(プレゼンター)に置き換えられた。
・MVCよりもクラス別の役割が明確になった。
MVVMとはModel-View-ViewModel(モデル・ビュー・ビューモデル)の頭文字を取ったものです。MVCにおけるControllerl(コントローラー)の派生モデルでありControllerlの概念を取り除いてView(ビュー)とView Model(ビューモデル)を結び付けるデータバイティングという仕組みを取り入れたものです。これによりMVVMではユーザーが入力した情報によってリクエストされたデータをデータバインディングによってデータベースから取り出すということを自動的に処理していきます。
・View(ビュー)をView Model(ビューモデル)が管理する。
・MVVMはデータバインディングを採用している。
MVCモデルを理解するために歴史や分類、特徴などを簡単に解説させて頂きました。MVCモデルはアプリケーションソフトウェアの実装において代表的なデザインパターンです。またプログラミング言語を利用する際に用いる様々な人気のフレームワークにもMVCモデルは採用されています。システムカ開発における概念として存在するMVCモデルについてこの記事で書かれている最低限の内容は理解をしておくようにしましょう。