2011-06-29 8 views
0

私は現在EF4とasp.net mvc 3で作業していますが、これらの技術を組み合わせるときに可能なさまざまなタイプのモデルを使って作業することは間違いありません。EF4モデルとMVCモデルとビューモデル...モデル化するかどうかは?

私は定義したデータベースを持っており、EF4を通して私のデータベースのモデルを持っています。しかし、私のビューに渡されるモデルもあり、ビューモデルはどうですか?

私はプロジェクトのMVCモデルを持っていると言います。このプロジェクトには、説明、名前、およびカテゴリのプロパティがあります。私はプロジェクトを作成し、それをef4を通してデータベースに挿入するためにコントローラに返すビューページを持っています。そこで私は当初、私のモデルとなるこれらの正確なプロパティを持つクラスを作成しました。しかし、私のページでは、そのプロジェクトを作成するときに選択するカテゴリのリストが必要なので、プロジェクトモデルの一部として他のプロパティとともにページに渡されたモデルに文字列配列を追加し、うまくいきました。すべてが素晴らしいです...しかし、私は考えています...プロジェクトモデルがプロジェクトをモデル化するならば、カテゴリの完全なリストを持つべきではないからです。そのプロジェクトの一部であるカテゴリのみを持つべきです。

しかし、この完全なカテゴリ一覧はどこにありますか。ビューバッグで?これは私には間違っているようですか?ビューモデルを作成する必要がありますか?このビューモデルはどのように見えるでしょうか? GetCategories()の行に沿った何かになるメソッドをプロジェクトモデルに追加すると、ビューページからこのメソッドを呼び出すことができます...しかし、それはmvcでの理想的な分離の分離を破りますか?

私は多くの人々がこのテーマについて異なる見解を持っていると確信していますが、この混乱を避けて助けになる助けとなる解説はあります。

おかげで、あなたはビューにモデルオブジェクトを渡していないオフ最高だすべてが、最も簡単なアプリケーションでは

答えて

0

。ビューには、Modelオブジェクトからのデータを使用してControllerによって構築され、Viewがその情報を表示する必要があるすべてのものを含むViewModelが必要です。

ViewModelsは、プレゼンテーションレイヤーをビジネスレイヤーから切り離します。この例では、これが重要な理由を示しています。あなたのビューはProjectに関する情報を必要としますが、Projectが属しているかもしれないCategoriesの完全なリストもあります。そのようなリストは論理的にProjectドメインモデルオブジェクトに適合しませんが、完全に論理的にはProjectViewModelに当てはまります。

+0

スティーブさん、ありがとうございます。カテゴリのリストをビューモデルの機能にしてビューから実行しますか?または、コントローラーでそのアクションを実行しますか? –

+0

私は 'SelectList Categories {get;セット; } 'プロパティを' ProjectViewModel'に追加し、それをコントローラに入力します。コントローラは、サイズに応じて[Repository](http://martinfowler.com/eaaCatalog/repository.html)オブジェクト(または[ServiceLayer](http://martinfowler.com/eaaCatalog/serviceLayer.html)オブジェクト)を持ちますそのシステムからの利用可能なカテゴリのセットをフェッチします。 –

関連する問題