「Ruby on Rails」や「Laravel」などのWebフレームワークを学んだ人は、「MVC」と言う言葉を聞いた事があると思います。
MVCとは、プログラムの役割を「Model, View, Controller」に分割する設計方針です。
一方で、「Django」は「MTV」(Model – Template – View)を採用しています。
基本的に同じ概念を角度を変えて言っているだけですが、もう少し噛み砕いて解説します。
「MTV」と「MVC」の違い
MTV(Django) | 説明 | MVC(Ruby on Rails) |
Model | データとロジック | Model |
Template | データの見せ方(How) | View |
View | どの様なデータを見せるか(What) | View |
URLディスパッチャ | リクエスト制御(URLの振り分け等) | Controller |
MTVとMVCの基本的な対応関係は上の通りです。
Modelは基本的に同じですが、MVCの「View」に相当する所にMTVの「Template」と「View」が該当します。
ViewとTemplateの違い
公式サイトのFAQに「View」と「Template」の違いについて書かれています。
In Django, a “view” describes which data is presented, but a view normally delegates to a template, which describes how the data is presented.
delegateとは、「権限委譲する」って意味合いの単語です。
要は、「Template」にどう見せるかお任せって事ですね。
Djangoの「MTV」をザックリ理解する
Djangoの「MTV」をザックリと理解して貰うために、例え話をします。
あなたが「会議」で発表し、参加者から「質問」を受ける時間になった事を想像して下さい。
その時の流れを考えてみましょう。
- 参加者から「質問」が来る(リクエスト)
- 質問内容を理解し、「即答」か「カンペ」を見るか考える(URLディスパッチャ、View)
- 難しい質問は「カンペ」を見にいく(Model)
- カンペを見て回答。良くある質問はプレゼン資料として事前に用意してある(Template)
「カンペ」が「Model」です。
複雑でない「質問」はViewのみで「即答」出来ますが、突っ込んだ質問だったり、細かい数字だと、「カンペ(手元資料)」に戻らないと厳しいですよね。
また、良くある質問については、分かりやすい様に事前にグラフとか図(Template)を用意して見やすくしておきます。
モデルについてもう少し詳しく
モデルについて、もう少し説明しましょう。
プログラミングには、「オブジェクト指向プログラミング」という考え方があります。
「オブジェクト指向」とは、ザックリ言ってしまえば「設計図(モデル)」を作って、退屈なプログラムを繰り返し書くのを避けようという考え方です。
例:猫について説明してください
例えば、「猫」について説明してくださいと言われたとします。
あなたは、どの様に答えますか?
まず、簡単に思いつくのは、色は「白」、年齢は「5歳」、飼い主「佐藤さん」といった「属性・状態(形容詞)」の情報を出すと思います。
プログラミングでは、属性の事を「プロパティ」と言います。
また、猫は「引っ掻く」、「餌を食べる」、「喉を鳴らす」といった「アクション(動詞)」について思いつくかもしれません。
アクションの事を、プログラミングでは、「メソッド」と言います。
オブジェクト=「データ(プロパティ)」+「ロジック(メソッド)」
そうすると、猫をもう少し一般的に説明するには、「状態(形容詞)」と「アクション(動詞)」の両方を定義する設計書を作っておけば、色々と使い回しが出来そうだと分かります。
これで、
モデル =「データ」+「ロジック」
の意味が分かりましたよね?
「データ」がプロパティで、「ロジック」がメソッドです。
そして、この結果を保存しておくのに、データベースを使うわけです。
「MVC」や「MTV」を考えるメリット
- 分業で専門家(Templateならデザイナーさん等)が集中しやすい
- 一つの機能が他の変更による影響を受けにくい。保守性が高まる
ズバリ、「機能が分離して、独立する」から「分業」したり、「メンテナンス」が簡単になるからです。
「Separation of Concerns(関心の分離)」と言うこともあります。
「MTV」も、「MVC」も関心の分離をどう言う切り口で言うかって事ですね。
機能が分離して独立するを例えてみる
例えば、先ほどの例に戻って考えると、あなたは別々の人に仕事を分担して貰えますよね。
「質疑応答のデータを集める人」や、「見やすい資料作成」に集中する人と作業を分けてお願い出来ます。
ちょっと難しい言い方をすると、「高凝集(責任が明確)」で「疎結合(お互い独立)」のプログラムが良いと言ったりします。
Djangoのファイル
最後に、それぞれの役割がどのファイルに書かれているかを見てみましょう。
どのファイルを見れば良いか明確なのでメンテナンスしやすいですよね。
MTV(Django) | 説明 | ファイル |
Model | データとロジック | models.py |
Template | データの見せ方(How) | templates |
View | どの様なデータを見せるか(What) | views.py |
URLディスパッチャ | リクエストのコントロール (URLの振り分け) | urls.py |
プログラミング初心者でも安心、Python/Django入門講座
プログラミング初心者でも安心、Python/Django入門講座 は、「Python」初心者に最もオススメなUdemyのDjango講座です。
動画は約15時間あり、文字列やリスト、辞書の操作といった「Python」の基本から、「Django」の開発まで段階的にステップアップしていきます
自分は、この講座でDjangoを最初に学びました。
Webフレームワークって何?って状態からでしたが、「ブログ」や、「動画投稿サイト」、機械学習と組み合わせた「手書き数字の認識アプリ」等の結構本格的なサイトが出来た時は、感動しますよ!!
Djangoを本格的に学びたい人はオススメです。