MVCアーキテクチャ内のビューのロジックに関連するQ&Aをかなり読んだことがありますが、ほとんどの場合、ビジネスロジックをビューに含めるべきではないことに同意します。ただし、これを言っても、MicrosoftのMVCフレームワークをエンティティフレームワークと組み合わせて使用する場合のアプローチには常に疑問があります。これは、単一のエンティティが外部キー関係に簡単にアクセスできるため、最終的には、LinqtoEntitiesクエリをインラインで実行することになります。意見。
例えば:
次の2つのエンティティがある場合:
製品([PK] ProductId、Title、Amount)
画像([PK] ImageId、[FK] ProductId、ImageTitle、DisplayOrder)
強く型付けされた製品ビューがあり、プライマリ画像(表示順序が最も低い)を表示したい場合は、ビューで次のようなことを行うことができます。
@{
Image image = (from l in Model.Image
orderby l.DisplayOrder
select l).FirstOrDefault();
}
これはデモンストレーション用の簡単な例ですが、確かにこれはMVCアーキテクチャに関連するルールを曲げ始めますが、一方で、コントローラーでこれを実行してから(天国では禁止)ViewBagまたはViewDataにジャムするのは確かに正しいでしょう犯罪の多くは、いくつかの異なる関連クラスを管理するのに苦労します。
以前は複雑なモデルのカスタムクラスを作成していましたが、時間がかかり、醜く、Entity Frameworkを使用すると、ビューをプライマリモデル(この場合は製品)としてすばやく簡単に定義でき、ポイントがわかりません。次に、Linqクエリを使用して、製品のすべての周辺コンポーネントを簡単に取得します。
他の人がこのタイプのシナリオをどのように処理するか知りたいです。
編集:
私もよく次のようなことをします:
@foreach(Image i in Model.Image.OrderBy(e => e.DisplayOrder).ToList())
{
<img ... />
}