ASP.NET MVC3とEntityFrameworkを使用して、マルチレイヤーを開発しています。ドメインレイヤーに属する「サイト」というエンティティがあります。ドメインエンティティのビューモデルとビューで直接言及することは許容されますか?
ViewModel
public IList <Domain.Entities.Site> Sites;
意見
foreach (var item in Model.Sites)
{
...
}
ASP.NET MVC3とEntityFrameworkを使用して、マルチレイヤーを開発しています。ドメインレイヤーに属する「サイト」というエンティティがあります。ドメインエンティティのビューモデルとビューで直接言及することは許容されますか?
ViewModel
public IList <Domain.Entities.Site> Sites;
意見
foreach (var item in Model.Sites)
{
...
}
通常はそうではありません。ViewModelのポイントは、モデルから必要な情報のみを抽象化することです。
サイトモデルにも対応するViewModelが必要です。
だからあなたは持っているでしょう:
// assuming the Domain model is what we're talking about
public class DomainViewModel
{
public IList<SiteViewModel> Sites { get; set; }
}
私はあなたの見解でドメインエンティティを参照することは完全に受け入れられると思います。ビューのドメインエンティティ内の情報を変換する必要がない場合は、ViewModelを使用して情報を抽象化する必要はありません。
このテーマについてはさまざまな意見がありますが、実際には、ドメインエンティティを抽象化することで何らかの価値が追加されているかどうかがわかります。ViewModelを作成すると、将来の柔軟性が追加され、それを正当化するのに十分な理由になるかもしれません。その場合は、必ずそれを行ってください。ただし、MVCに違反することを恐れる必要があるとは思わないでください。
モデルに直接バインドすることは、短期的な解決策です。モデルに直接関連していない他のプロパティにバインドする必要がある場合に備えて、ビューモデルでモデルをラップすることをお勧めします。つまり、bool CanDelete、bool IsEnabled .. ..
一般的に、いいえ。
これがQUICKおよびBASICアプリケーションである場合は、気が進まないでしょう。
それ以上のことは、自分の足で撮影していて、一般的に受け入れられているパターンは、ViewBagを使用するのではなく、必要なすべてのデータ(SelectListデータなどを含む)を保持する代わりにViewModelsを使用することです。
ところで、ViewBagでは、それも避けてください:http: //completedevelopment.blogspot.com/2011/12/stop-using-viewbag-in-most-places.html