1

私は数多くのブログを読み、パターンとプラクティスからパフォーマンスへの最良のアプローチは何かを判断しようとしています。

オプション 1 次の部分的なビュー Index.cshtml があります。

@if (Model.SomeBooleanProperty)
{
     <div>A chunk of HTML</div>
}

オプション 2 次の部分的なビュー Index.cshtml があります。

@Html.Partial("SomeBooleanProperty", Model)

その部分ビューにはブール論理があります。

@if (Model.SomeBooleanProperty)
{
     <div>A chunk of HTML</div>
}

オプション 3 次の部分的なビュー Index.cshtml があります。

@Html.Action("AControllerMethod", "Controller", Model)

そしてAControllerMethodは次のように

[ChildActionOnly]
[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get)]
public ActionResult AControllerMethod(SomeModel model)
{
   if (model.SomeBooleanProperty)
   {
    return View(model);
   }
   else
   {
        return new ContentResult() { Content = String.Empty };
        //return null
   }
}

そして、返されたその部分は次のようになります(条件付きロジックなし)

<div>A chunk of HTML</div>

オプション 3 は、ビューにロジックがないため、懸念事項の分離の観点からは最善のように思えますが、子供と言うブログを読んでいるので、確実にパフォーマンスに影響を与えるので、アンチパターンのようにも思えます。アクションはパフォーマンスに影響を与えます。

どんな助けでも大歓迎です。J

4

1 に答える 1

2

私の意見では、他のどこで同じ出力が必要になるかによって異なります。

サイトの他の部分でそのモデルの表示ロジックを再利用する場合は、if ステートメント/マークアップを含む部分ビューを用意し、部分ビュー@Html.Partial("SomeBooleanProperty", Model)を表示する必要がある場所で呼び出すことが理にかなっています。

たとえば、このロジックを 1 つのページにのみ追加する場合は、メイン ビューに if ステートメント/マークアップを配置するだけで、分離する必要はありません。

オプション 3 は表示ロジックの制御には使用しません。これはビュー ロジックであるため、ビューで条件付きロジックを実行しても問題ありません。

オプション 3 はビュー モデルを簡素化します。つまり、必要なすべてのデータを親ビューに渡す必要はありませんが、必要なコントローラーを呼び出すパフォーマンスのオーバーヘッドが発生します。

于 2013-03-05T13:07:55.717 に答える