2016-09-30 3 views
1

「ベストプラクティス」への参照がありますが、ビュー内の静的データにアクセスする際に、ViewBagオブジェクトとApplicationオブジェクトを使用する方が良い理由は何ですか?ViewでApplication ["x"]の代わりにViewBagを使用するのはなぜですか?

どちらも可能です。すべてのビューにオブジェクトを追加したいが、必ずしもそれを渡してモデルを見る必要はないと仮定しよう。

これは、グローバルフィルタのようにいくつかの方法で行うことができますが、アプリケーション変数にアクセスする方がずっと便利です。

答えて

1

どちらも、MVCが意味するすべてのものをバイパスする厄介な回避策です。

Model-View-Controllerパターンでは、コントローラはViewを生成するために必要なすべての値を含むModelを準備し、ViewはModelプロパティを表示します。

ViewBag、SessionまたはApplication変数のようなパターンを回避するために使用する方法は、ビューから直接変数にアクセスする限り、MVCを無効にする反パターンです。

Pass data to layout that are common to all pagesおよびCreate ViewModel for Navigation:すべてのページに特定の値が必要な場合は、基本ビューモデルまたは部分ビューの使用を検討してください。

はい、このディスカッションは、実用的な/純粋な人の話です。たとえば、すべてのユーザーに共通のメニューがデータベースから読み込まれている場合は、AppDomainごとに一度読み込むためのキャッシングの目的でApplication変数に格納してください。しかし、それでもベースのViewModelまたはPartialを使用してそのメニューをレンダリングします。

1

私はビューバッグにデータを置くことがベストプラクティスであるとは言いません。私はビューモデルを使用することがベストプラクティスであると言います。

あなたはすべてのビューにオブジェクトを追加しますが、必ずしも(さえ与え ビューのためのモデルがないかもしれないので)それがモデルを表示する を渡さないしたいとします。

ビューモデルを定義していなくても、概念的にはビューにデータを渡しているというモデルがあります。

は、データがすべてのビュー上にある場合、あなたはすべてのモデルは、その汎用データが含まれていますから継承ベースのビューモデルを作成することができWhy do we use ViewModels?

を参照してください。

独自のビューモデルを使用して部分ビューを作成し、各ページに適用することもできます。

0

アプリケーションに多数のオブジェクトや大きなオブジェクトを格納するとメモリ不足のリスクがあります。

オブジェクトをアプリケーションコレクションに配置する必要があるのは、アプリケーションのライフサイクル全体にわたって有効で、単一のページやセッションだけでは使用できないオブジェクトであることがわかっていることです。 (アクティブでないか、設定された間隔の後にアプリケーションプールによってアプリケーションがシャットダウンされる可能性があることにも注意してください)

アプリケーションの多くのオブジェクトを配置/削除して、ロジックはフォローするのが難しい傾向があります。

0

通常、アプリケーションのビジネス概念や機能概念を考慮してViewModelを設計します。 たとえば、請求書を表示する場合、ビューモデルには、特定のビューに表示する必要がある請求書に関連するすべてのプロパティが含まれている必要があります。私はこの目的のためにViewBags/ViewDataを使用しません。

私は通常、ビューの一部を表示/非表示するためのブール値やその他の「ビジネスに関係ない」プロパティのような、他の「より付随的な」プロパティを設定します。

もちろん、一部の人はこれに同意できず、すべてをViewmodelsに入れてしまいます。これは冒頭に取らなければならない決定であり、アプリケーション全体の設計方法に一貫性を持たせることができます。

関連する問題