web-dev-qa-db-ja.com

Django vs. Model View Controller

誰かがDjangoとModel View Controllerパターンの間の違いがあることを説明できますか?

機能的には、これらの違いから何を期待できますか。つまり、Django=とRailsの場合、Ruby?

103
Leonardo

Django Book 、Djangoによると、MVCフレームワークと呼ばれるほどMVCパターンに厳密に従っています。

DjangoはMTVフレームワークと呼ばれています。これは、コントローラーがフレームワーク自体によって処理され、ほとんどの興奮がモデル、テンプレート、およびビューで発生するためです。

MTV/MVCの詳細については、こちらをご覧ください。

MTV(またはMVC)開発パターン

Ruby on Railsなど)のような他のMVC Web開発フレームワークに精通している場合は、DjangoビューをcontrollersおよびDjangoテンプレートはviews).

これは、MVCの異なる解釈によってもたらされる不幸な混乱です。

DjangoのMVCの解釈では、viewはユーザーに提示されるデータを説明しています。データの見た目だけでなく、どのデータが表示されるかということもあります。

対照的に、Ruby on Railsおよび同様のフレームワークは、コントローラーのジョブがどのデータをユーザーに提示するかを決定することを含むことを示唆しています。表示されるデータではなく、表示されます。

127
Paolo Moretti

Django FAQ自体は開始するのにふさわしい場所です:

MVCの解釈では、「ビュー」はユーザーに提示されるデータを表します。必ずしもデータがどのように見えるかではなく、どのデータが表示されるかです。このビューは、どのように表示されるかではなく、どのデータが表示されるかを説明します。それは微妙な違いです。

...

さらに、コンテンツをプレゼンテーションから分離するのが賢明です。プレゼンテーションはテンプレートの出番です。Djangoでは、「ビュー」はどのデータが表示されるかを説明しますが、ビューは通常テンプレートに委任されます。

では、「コントローラー」はどこに収まりますか? Djangoの場合、おそらくフレームワーク自体です。Django URL構成に従って、適切なビューにリクエストを送信する機械です。

頭字語に飢えているなら、Djangoは「MTV」フレームワーク、つまり「モデル」、「テンプレート」、「ビュー」であると言うかもしれません。センス。

「Model View Controller」は単なるパターン、つまり一般的なアーキテクチャを説明する試みであることに留意してください。したがって、より良い質問は、「Djangoモデルビューコントローラーパターンにどの程度適合しますか?」

22
Paul D. Waite

フレームワークのピースの名前を考えずにコーディングする場合、たとえばRoRのように実質的な違いはありません。ただし、Djangoには他のフレームワークではコントローラーレベルにとどまるロジックが簡単に含まれているため、modelsの使用方法に依存します。

view on Django=は、データを取得するためのクエリのセットであり、テンプレートに渡します。

10
inigomedina

Mvtでは、URLへのリクエストがビューにディスパッチされます。このビューはモデルを呼び出し、操作を実行し、出力用のデータを準備します。データはテンプレートに渡され、応答として出力されます。理想的には、Webフレームワークでは、コントローラーはビューから隠されています。

これがMVCとの違いです。MVCでは、ユーザーがGUIと対話し、コントローラーが要求を処理してモデルに通知し、ビューがモデルにクエリを実行して結果をユーザーに表示します。

7