2009-12-11 2 views
22

相手の責任は何ですか? どのような種類のロジックを1つのものと別のものに入れなければなりませんか? サービスとデータベースにはどれが当てはまるのですか? コードをビューモデルまたはコントローラに配置するかどうかを決定するにはどうすればよいですか?ViewModelとControllerの違いは何ですか?

私はASP MVCを使用していますが、アーキテクチャ上の問題であるため、使用している言語やフレームワークは重要ではないと思います。私はすべてのMVCを応答するように招待しています

答えて

23

ViewModelは、ビューの表示ロジックと状態を処理するために使用されるパターンであり、コントローラはMVCの基本部分の1つですフレームワークは、任意のHTTPリクエストとHTTPレスポンスまでorchestすべての後続のアクションにその応答

ビューモデルパターン:ビューモデルパターンではMore info

、UIと 任意UIロジックは、中に封入されています 表示。 Viewは、プレゼンテーションロジック と状態をカプセル化するViewModel を観察します。次のViewModel はモデルとやりとりし、 ビューとの間の仲介者として として動作します。

View <-> ViewModel <-> Model 

コントローラ(フロントコントローラパターンから来る):More Info

それは "要求を処理するための集中エントリポイント を提供します。"

HTTP Request -> Controller -> (Model,View) 

--Plain違い: -

  • をViewModelには、あなたがMVCの道を進んでいる 場合コントローラは、必見ですオプション パターンですが。
  • ViewModelは プレゼンテーションロジックと状態をカプセル化します。 コントローラオーケストすべて アプリケーションフロー。
0

モデルはあなたのデータとその操作方法を表しています。したがって、モデルはモデルに触れます。

あなたのUIはあなたのものです。

Controlerはそれらの間の接着剤です。

1

いくつかのデータ(構造化または半構造化)を生成するために、ロジックとモデルを呼び出す必要があります。このデータから、返されたページ/ JSON/etcが返されます。通常、基本的なアウトラインロジックのみで作成されます。

最初の部分(データの作成)はコントローラによって(通常はモデルを介して)行われます。 2番目の部分 - ビューによって。 ViewModelは、コントローラとビューの間で渡されるデータ構造であり、通常はアクセサのみを含みます。

2

MVC(Model-View-Controller)は、主にプレゼンテーションからビジネスロジックを分離するために存在するアーキテクチャ設計パターンです。基本的に、バックエンドがフロントに触れることは望ましくありません。それは、典型的には、次のようになります。これを行うための

alt text

理由はバックエンドとフロントを分離することにより、あなたはあなたのデータ/仕事に直接お使いのユーザーインターフェイスを結ぶいないからです。これにより、上記のロジックに影響を与えることなく、ビジネスロジック上に新しいインターフェイスを配置することができます。また、テストの容易性も向上します。

MVCが便利な簡単な例です。あなたの会社の財務を管理するアプリケーションがあるとしましょう。あなたがMVCを正しく使用しているなら、フロントエンドをいくつかの金融業者の机の上に置いて、トランザクションを処理し、財務を管理させることができます。しかし、ビジネスロジックが分離しているので、フロントエンドあなたのCEOのブラックベリーに、彼はビジネスの現在の状況を見ることができます。 2つのフロントエンドは異なるため、データにさまざまな種類のアクセスを提供しながら、さまざまなことを行うことができます。

EDIT:

、あなたの質問ビットを更新しているので、私は私の答えを更新します。 MVCの分離には完璧な科学はありません。しかし、親指のいくつかの良いルールがあります。たとえば、GUIコンポーネントについて話している場合、これはおそらくビューです。 (あなたは、ルック・アンド・フィール、ユーザビリティなどについて話していますか?)データや家の「ビジネス」側(データベース、ロジックなど)について話しているなら、おそらくモデルを指しているでしょう。そして、2つの間の相互作用を制御するものは、コントローラである可能性が最も高いです。

さらに、ビューとモデルは通常「物理的に」分離されていますが、コントローラーは意味をなさないときにはビューを持つことができます。

MVCのフレームワーク(または言語)が問題ではないと言っても間違いありません。パターンそのものは言語にとらわれず、実際にシステムを設計する方法を記述しています。

希望に役立ちます!

+0

私は「言語にとらわれない」というフレーズが好きです。 –

+0

ありがとうございます。ビューモデルとコントローラの違いを拡張することは可能でしょうか? – MedicineMan

1

教訓を受けたことには価値があると思います。しかし、教義がどのようになったかを理解することにも価値があります。

Trygve Reenskaugは、MVCの発明に広く認められています。 N. Alex Ruppの記事Beyond MVC: A new look at the servelet architectureにはMVCの歴史が含まれています。 Reenskaugの1978年のXerox Palo Alto Research Centerでの作業のセクションには、彼の論文Thing-Model-View-Editor: an Example from a planningsystemへのリンクがあります。そこには、このような作品が描かれています。ユーザーが関心のある

シング

何か。具体的には、家屋や統合された サーキットのようなものです。それは、新しいアイデアや論文に関する意見のように、抽象的である可能性があります。それは、コンピュータのような全体、 、または回路要素のような部分である可能性があります。

モデル

モデルは、コンピューティングシステムに

表示

におけるデータの形で抽象化のアクティブであります任意のモデル1つまたは複数のビューが添付され、各ビューは、画面上およびハードコピー上にモデルの1つまたは複数の図形表現を示す を表示することができます。 A ビューは、そのビューに合理的に関連付けられているモデルに対してこのような操作を実行することもできます。

エディタ

エディタは、ユーザと1つまたは複数のビュー間のインタフェースです。これは、例えば、現在の状況に応じて動的に変更できるメニューの形態の適切なコマンドシステムをユーザに提供する。 。必要な調整と コマンドメッセージをビューに提供します。

ルップはコントローラーまたはツールとしてReenskaugのエディタを識別します。

MVCトライアドがSmallTalk-80で登場しました。モデルは現実世界の概念の抽象化であり、ビューは視覚的表現であり、コントローラはユーザーがそれと対話できる(ビューを制御する)ためのボタンとスライダーバーでした。トライアドのすべての部分は相互に接続されており、他の2つの部分と通信できるため、レイヤリングや抽象化は必要ありませんでした。それ以来、Reenskaugは「コントローラではなくツールという用語を使用することを好みました。彼のノートによれば、これらは後の実装で使用した用語です

-3

MVCとはModel、View、Controllerのことです。

モデル=データ(データベーステーブル)

ビュー= HTML、CSS、JavaScriptの、など

コントローラー=メインロジック、モデル&ビューとの間の契約。シンプルで把持可能な用語で

MVCはあなたのビジネスデータとプレゼンテーションデータが分離された方法でアプリケーションを開発することができます。これにより、開発者とデザイナーは、作業の衝突なく、MVCアプリで独立して作業することができます。 MVCはあなたのアプリをOOPでも利用できます。

6

enter image description here

  • ViewModelには、サーバ側だけでなく、クライアント側ですることができます。 可能性がありますが、ビューモデルの唯一の目的は プレゼンテーションデータを再生することです。
  • MVCアーキテクチャでは、Viewmodelは必須ではありませんが、コントローラ外ではクライアントからの要求を処理できません。
  • コントローラは、クライアントとサーバーの間のメインインターフェイスとして視覚化して、サーバーからの応答を得ることができます。クライアント要求を処理し、リポジトリからデータをフェッチし、次にビュー・データを準備します。 ViewModelは、ビューデータプロセッサ/プレゼンタとして視覚化することができるため、ビューをより雄弁に管理することができます。
  • Webアプリケーションの全体的なコンテキストでは、コントローラはアプリケーション要求ハンドラであると言えますが、viewmodelはUIハンドラだけです。
+1

MVCとMVVMの違いは何か不思議だったので、私はこの質問に答えましたが、私が正しいとすれば、あなたのイラストによれば、MVVMはMVCのサブセットです。 –

+0

@OgierSchelvis、いいえ、違いはありますが、MVVMC(両方の組み合わせもあります)を持つこともできます。 –

関連する問題