MVC概念を理解するためのメモ


本投稿は、これからフレームワークを勉強していくにあたって、初心者でも一から勉強していくための覚書として記載する。

「MVC」とは何か?

MVC は「Model」「View」「Controller」の頭文字をとった デザインパターン の一つ。

  • デザインパターンとは

    1994年に発売されたGoFによる著書 「オブジェクト指向における再利用のためのデザインパターン」 で広く認知されるようになった概念。開発を行う上で、「再利用性」 の高いプログラミングを行うための指針とも言える。

    問題が発生した際の解決策は、1994年までは体系化されておらず、開発に時間がかかったり、問題解決に難航することも多かった。
    そこで、「よく発生する問題とそれに対処する良い設計」 を23パターンに分類し、技術者たちに認知させる事で生産性を向上させた。

    ただし、あくまでも問題解決に対するトレードオフが成立しやすい場合の解決策であり、 最善の改善策ではない場合もある 、という事は肝に命じておく必要がある。

  • 「再利用性を高くする」とはどういう事か

    「デザインパターン」という概念の存在しない時代のプログラミングは、全てを一つにまとめてコーディングすることも珍しくなかった為、どの部分でトラブルが発生しているのか、どこに変更を加えるべきなのか等が分かりづらく、時間がかかってしまう事が多かった。

    「再利用性を高くする」とは、多く人間が携わりたくさんのコードが存在する中で、それぞれの役割をしっかり区分し、 トラブルが起きた際や変更を加える際に トラブルの特定や使用の変更・追加をしやすくする事で、生産性を高める ということ。

「MVC」とは、それぞれの役割を、「Model」 「View」 「Controller」に区分した生産性を高める設計のデザインパターンである。

「Model」 「View」 「Controller」とは

「MVC」が、役割を区分したデザインパターンである事は分かった。ではどのような役割に区分されているのかを以下にまとめる。

Model

  • DB内のデータを操作する(取得・作成・更新・削除)
  • DB内のデータを加工する(Model内のデータを組み合わせる、要求されたデータ形式に整形する、等)

View

  • ユーザーが閲覧する箇所のコードを生成し、実装を行う
  • 主にユーザーはこの「View」を通してアプリケーション等の操作を行う

Controller

  • 「Model」と「View」の橋渡し的な役割を担う
  • 「View」から受けとったユーザーからのリクエストに応じた処理を実行する
  • 「Model」へデータの受け渡しを行う
  • 「View」を生成する際に、「Model」から受け取ったデータを「View」に渡す
  • 直接に描画を行ったり、「Model」の内部データを直接操作したりはしない。

このように区分することで、例えば、「View」はデザイナーが担当する等、技術者の役割分担が明確化している。プログラミングの面においても「デザインパターン」で学習したように、機能が区分され、機能同士の変更に影響を及ぼしにくいというメリットがある。

あくまでも基礎概念としての「MVC」

「MVC」のデザインパターンに関する論文は、1988年に初めて公開され、本投稿の最初に紹介したGoFによる書籍「オブジェクト指向における再利用のためのデザインパターン」の中で紹介された。この書籍の販売した年も1994年と非常に古い。

2019年現在においても多く利用される概念の一つではあるものの、多様化する開発においては対応しきれない局面も数多く見られる。現在では発展的なデザインパターンも数多く存在する。

「MVC」の発展形に関する具体例

※今回詳細は省くものの、後学のための学習を推奨

  • MVC2
  • MVVC
  • Model2MVC
  • MVP 等

本投稿では、それら発展的なデザインパターンに最初から飛びつくのではなく、それらを理解するための基礎の一つとして把握しておく事を念頭に「MVC」の概念を理解する事を強く推奨する。

参考サイト