2011-09-15 10 views
0

私は高度にカスタマイズ可能と思われるMVC3を使用してWebページを作成しています。たとえば、テレビ番組のIMDBページをご覧ください。MVC3のhtml.partial呼び出し内のhtml.action呼び出しに関連するコストはいくらですか?

私はIMDBクローンを作成していたとしましょう。タイプに応じて(例えば、ウィジェットと呼ばれる)、複数のコンポーネント(ウィジェットと呼ばれます)があります。ページ(映画、テレビ番組、俳優)のうち、異なるウィジェットを表示します。また、ユーザーは、各タイプのページから特定のウィジェットを追加または削除するための設定を変更することもできます。

私の設計では、メインビューのコントローラが、個々のウィジェットに必要な情報を取得するために必要な情報を含む「ウィジェットビューモデル」のコレクションを渡すようにしました。したがって、ID(データベースから情報を取得するため)、コントローラーおよびアクションを提供します。

メインビューの内部では、このウィジェットビューモデルのリストを反復し、各ウィジェットの共通HTMLおよびJavaScript/jQueryを含む汎用ウィジェットコンテナの部分ビューのhtml.partialを呼び出し、個々のウィジェットビューモデルその部分的な見解に

一般的なウィジェットコンテナのコンテンツdivでは、idフィールドで情報を取得する特定のコントローラアクションを呼び出すことによって、別のhtml.actionを呼び出して特定のウィジェットの部分ビューを呼び出します。ウィジェットビューモデル

クリフノート:メタデータオブジェクトのリスト - >メインビュー。各メタデータオブジェクト - >共通部分ビュー。部分ビュー - >メタデータを使用してデータを取得する別の部分ビュー

だから今、あなたがそのすべてを読んだこと

、私は2つの質問があります。各部分図を呼び出すと、メインビュー内で複数のhtml.partial電話を持つに伴うコストは、何ですか

  1. html.action?

  2. これは良い論理設計ですか?

答えて

2

興味深い質問 - 私は自分自身で答えを知りたいので、いくつかの実験を行いました。

1)コストはコントローラオブジェクトの作成です。 Html.Action()を呼び出すたびに、コントローラオブジェクトの新しいインスタンスが作成されます。これは、同じビューの途中で同じコントローラで複数のアクションを呼び出す場合でも同じです(これを試しました)。これは、すべてのアクションがきれいなスレートを持つことを保証しているため、良好な動作です。

@ Html.Partialは負担ではありません。コンパイラは物事を最適化する必要があります。

あなたのコントローラが(データベースのような)外部サービスで重労働をしている場合、一度にかなりの数の接続を開くことができますが、1つのリクエスト(親ページとビューがレンダリングされるまでコントローラが処分されないため、ビューのためのものです。サブビューの場合、これはHtml.Actionの最後にあるはずです)。だから、あなたはこれを知っておく必要があります - あなたの行動が高価なリソースを作り出すなら、これは追加する可能性があります。

2)デザインにもかかわらず、上記にもかかわらず、それは私にとって悪くはないようです。あなたは心配の良い分離を得て、あなたの個々のコードのどれも複雑すぎることはなく、あなたはいつもあなたのコードがどこにあるかを常に知っています。

パフォーマンスの最適化と開発の最適化を行う必要があります。これはコントローラの動作の重さによって異なります。

+0

ありがとうございました。新しいコントローラオブジェクトが毎回インスタンス化されるかどうかはわかりませんでした。しかし、ええ、開発/パフォーマンスのトレードオフが容易であるようです。私はちょうどそれを心に留めておく必要があります。 –

関連する問題