web-dev-qa-db-ja.com

MVC(model-view-controller)-簡単に説明できますか?

私はあまり技術者ではないマネージャにMVC(モデルビューコントローラ)の概念を説明する必要があり、問題が発生しました。問題は、説明が「おばあちゃんが理解する」レベルである必要があることです。 MVC Wikiページ で提供されるかなり簡単な説明でさえ、少なくとも私のコメントでは機能しませんでした。

誰かが簡単な言葉で良いMVCの説明への参照を持っていますか?

技術者以外の比喩の例(「デコレータパターンはガラスのようなもの」など)を使用して行うのが理想的です。失敗した理由の1つは、思いついたすべてのMVCの例が開発に関連していたためです。

私はかつてパターンの説明のリストを見ましたが、私の記憶の中でMVCはその上にありませんでした。

ありがとう!

41
DVK

これはどうですか-うまくいけば、うまくいきます。

MVCはテレビと比喩的に関連している場合があります。さまざまなチャネルがあり、ケーブルプロバイダー(モデル)によって提供されるチャネルに関するさまざまな情報があります。 TV画面には、これらのチャンネルが表示されます(ビュー)。リモコンのボタンを押すと、表示内容と表示方法(コントローラー)に影響します。

テレビを見ていたので、そこからインスピレーションを得ました!

96
Tilo Mitra

私は隠喩を信用していません。しかし、それを説明するのは難しくありません:

  • モデルは物事を知っているコードの一部です
  • ビューは、モデルが知っていることを示すコードの一部です
  • コントローラは、ユーザーからコマンドを取得し、何を表示するか、何を知っているかをモデルに伝えるコードの一部です。
32
Javier

私がそれを説明する最良の方法は次のとおりです。

  • モデルはデータソースです。これはデータベースストレージであり、ウェアハウスに保管する情報を追加/削除/更新/変更するために必要なコードです。
  • ビューは、ユーザーが見て操作する部分です。 HTMLページ、アプリケーションウィンドウ。
  • コントローラは、ビューをモデルに結合するコードです。 「削除」ボタンをクリックすると、ビジネスロジックとルールが処理されます(削除する権限のある人ですか?削除可能なレコードなど)。

ビューはモデルについて何も知る必要はありません。モデルはビューについて何も知る必要はありません。コントローラは、情報ソース(モデル)と出力(ビュー)を結合するものです。

ビデオゲームの観点から考えてみてください。さかのぼる-さまざまなビデオカードがたくさんあり、それらがどのように機能したか。ゲームは、ゲームに話しかけるためにあらゆる種類のコードを必要としました。ゲームをプレイする前に、自分が持っているカードの種類を選択する必要がありました。ゲーム開発者は、さまざまなビデオカード用のコードを作成する必要がありました。

それに伴い、OpenGLやDirectXのようなものが登場し、それらの間の中間層として機能しました。ゲーム開発者は、異なるカードの命令セットの代わりに、DirectXインターフェイスに書き込むことができます。これにより、ゲーム開発者は特定のビデオカードについて知る必要がなくなりました。これにより、カードメーカーはDirectX命令セットに合わせて設計できるようになりました。

この場合、ゲームのプレイはView、DirectXはController、そしてModelはビデオカードです。

10
Jason

M-V-Cは、「注文の詳細(顧客と従業員の情報を含む)」、「HTML/ASPフォーム(OrderDetailsを表示するため)」、および「注文の詳細サービスクラス(SaveOrderDetails、GetOrderDetailsなどのメソッドを持つ)」と考えてください。

モデル(OrderDetailsなどのデータクラス)

The data you want to Display

コントローラー(Serviceクラス)

Knows about the Model (Order Details)
Has methods to manage the Model
And as such can be unit tested Its Single Responsibility is to manage the OrderDetails CRUD operations.
It knows NOTHING about the View

ビュー(ASPページ)

Displays the Model (OrderDetail's ViewData).
It has to know about the Model's structure so it can correctly display the data to the users on screen.
The View's structure (style, layout, HTML etc., locale) can be changed at anytime without it changing anything in the application's functionality.
And as such, many Views can display the same Model in many different ways.
In multi-tenant web applications, Customer specific Views can be stored in a database table and displayed based on Customer information

「あなたのおばあちゃん」に、あなたがモデル(あなたが仕事をしている)であり、彼がコントローラー(つまり、ミドルマネージャー)であり、ビューがマーケティングのようなものであり、すべての信用を得ていることを伝えます。

2
gonzobrains