はじめに
こんにちはk_ukiです。
この度、Pythonのwebフレームワークである、「Django」を使用する機会が来たため、そのキャッチアップをおこなっております。
今までは、Rubyのフレームワークである「Ruby on Rails」をよく使用していたことから、抽象的な概念である「MVC」の考え方に馴染みがありました。しかし、Pythonではよく似た概念として「MTV」という概念が使われており、初めてDjangoに触れる身としては少し違和感がありました。
今回は、Djangoの抽象的な概念である「MTV」と、Railsなどで用いられる「MVC」の比較を行いその違いについて解説しようと思います。
概要
- MVCとは?
- MTVとは?
- RailsとDjangoの違い
MVCとは?
MVCとは、フレームワーク内の処理を大きく「Model」「View」「Controller」の3つの概念に整理したものとなります。主に Laravel, Railsなどといったフレームワークで使われています。これだけだと意味が伝わらないと思うのでこの3つの概念について掘り下げていこうと思います。
Model
モデル(Model)はアプリケーションの処理やデータを取り扱う部分となります。後述するコントローラの指示によって、データベースから必要な情報を取得したり、逆にデータの登録や更新、削除などをしたりします。Railsだと「モデル名.rb」のファイルが該当します。
View
ビュー(View)は、Webアプリにおけるコンテンツの表示を行う部分を指します。今見ているこのQiitaの画面のViewに該当します。コントローラやモデルから取得した情報を基にコンテンツの表示をおこないます。
Controller
コントローラ(Controller)は、送られてきたリクエストに応じて、表示するビューを指定したり、ビューに渡すデータの取得をモデルに依頼したりする部分になります。つまりはWebアプリケーションにおける「司令塔」に該当する部分であり、アプリケーションの動きやデータを定義します。
MTVとは?
MTVは前述のMVCのように、webアプリケーションにおける処理を「Model」「Template」「View」に分類したものとなります。主にDjangoで使われる考え方になります。コントローラ以外は、MVCとよく似ているように感じられますが、言葉の意味に若干違いがあるのでそこを中心にそれぞれ詳しく述べていきます。
Model
モデルはMVCの概念と一番似通っており、webアプリのデータを取り扱う部分となります。データベースとやり取りを行い、データの作成、更新、削除などを行います。
Template
テンプレートはMVCの概念でいうと「View」に似ており、指示に応じてHTMLファイルを作成する部分となります。主にアプリの表示に関わる箇所を担います。
View
ビューは、モデルから取得してきた情報を取得しテンプレートに渡す部分になります。処理内容としてはMVCの「Controller」に似ていますが、ルーティングに応じて表示するページを決定する機能はURLディスパッチャという部分が担います。
つまりMTVにおけるビューはコントローラの「どんなデータを表示させるか」という機能に特化している部分といえ、URLディスパッチャとの連携をなすことでMVCのコントローラのような役割をする部分といえます。
両者の違い
MVCとMTVの違いはMTVのテンプレートとビューによく表れています。Djangoのテンプレートでは、モデルから直接情報を取ってくることができません。テンプレートはただページの内容を返す(表示する)だけの部分でページの振る舞い等はビューで記述します。ここがRailsなどのビューとの大きな違いとなります。「どのような振る舞いをさせるか」などの処理の分業をMVCよりも更に細かく定義することで、アプリの設計や保守、開発をやりやすくしようとしたのがMTVという考え方であると言えます。