0

私は、ASP.NET MVC 3とEntity Frameworkを使用して多層を開発しています。私は、ドメイン層に属する「サイト」というエンティティを持っています。ドメインエンティティのビューモデルとビューで直接言及することは許容されますか?viewmodelとビューで直接記述されたエンティティは受け入れ可能ですか?

のViewModel

public IList <Domain.Entities.Site> Sites; 

ビュー

foreach (var item in Model.Sites) 
{ 
... 
} 
+0

を、それが「許容」ではないでしょうなぜ私は表示されません - それはそのデータとプレゼンテーション層に最も近いオブジェクトの場合は、「SiteViewModelは」しまうため – Tejs

答えて

4
通常

ません。 ViewModelのポイントは、モデルから必要な情報のみを抽象化することです。

サイトモデルにも対応するViewModelが必要です。

は、あなたが持っているでしょう:

// assuming the Domain model is what we're talking about 
public class DomainViewModel 
{ 
    public IList<SiteViewModel> Sites { get; set; } 
} 
+0

はリワークではないでしょう。 –

+1

@AdrianoSilva - 当分の間はそうかもしれませんが、それは必ずしも保証するものではありません。彼は2つを分離するというポイントは、必要な情報だけをビューに渡すことです。ビューはSiteのすべてのメンバーを必要としない場合があります。 –

2

を私はあなたのビューでドメインエンティティを参照するために完全に受け入れられると思います。ドメインエンティティの情報をビュー用に変換する必要がない場合は、ViewModelを使用してドメインエンティティを抽象化する必要はありません。

この件に関する意見は異なるかもしれませんが、実際には、ドメインエンティティを抽象化して値を追加しているかどうかが分かります。 ViewModelを作成することで、将来的な柔軟性が増し、おそらくそれを正当化するのに十分な理由があります。それが事実なら、是非それをしてください。しかし、あなたがMVCに違反する恐れから外さなければならないと感じないでください。

0

モデルに直接バインドすることは短期的な解決策です。モデルを直接モデル化していない他のプロパティにバインドする必要がある場合に備えて、モデルをラップすることをお勧めします。すなわちbool CanDelete、bool IsEnabled ...

0

一般的に、

これがクイックで基本的なアプリケーションの場合は、気をつけてください。

あなたは足で自分自身を撮影していると一般的に受け入れパターンがViewBagを使用するのではなく、など、SelectListのデータが含まれます(必要なすべてのデータを保持する代わりのviewmodelsを使用することであることを超えた何か。

ところで上ViewBagは、あまりにもことを避ける: http://completedevelopment.blogspot.com/2011/12/stop-using-viewbag-in-most-places.html

関連する問題