6

かなり長い間 Asp.Net MVC を使用していますが、非常に奇妙な質問に行き詰まっています。モデルを作成するたびに、次のようなラムダ式を使用します。

@Html.EditorFor(model=>model.SomeProperty)

Asp.Net MVC がこのようなタイプのアーキテクチャを使用するのはなぜですか?

リフレクションを使用してプロパティを渡すことができないのはなぜですか?

ラムダ式を使用する方が高速ですか? 内部的には、プロパティ名を取得するにはリフレクションを使用する必要があると私は考えています。

4

2 に答える 2

9

ラムダ > 反射

ラムダを使用すると、次のようになります。

  • デザイン時の厳密に型指定されたプロパティ セレクター。
  • 組み込みの Visual Studio リファクタリング ツールを使用すると、リファクタリングが容易になります。

ラムダのおかげで、API はプロパティ セレクターから多くのことを知ることができます。

  • プロパティ タイプ。
  • プロパティのオブジェクト。
  • プロパティのメタデータを調べます。

さらに、メソッドの署名を確認します ( http://msdn.microsoft.com/en-us/library/ee402949(v=vs.108).aspx ):

public static MvcHtmlString EditorFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression
)

これは、通常のラムダではなく式ツリーです。これにより、MVC (および任意の API) が式を操作して、リフレクションを発生させることなく、実行時に呼び出す前に動作を追加できます。

式ツリーの詳細:

于 2013-02-08T08:52:42.553 に答える
1

私の答えは人気がありません。

私は 3 つの理由から Lambda が 99% 常により良い選択であると信じています。

まず、開発者が頭が良いと仮定することはまったく問題ありません。他の答えには、あなた以外のすべての開発者が愚かであるという根本的な前提があります。そうではありません。

第二に、Lamdas (他) は最新の構文であり、明日は今日よりも一般的になるでしょう。プロジェクトのコードは、現在および新たに出現している慣習に沿っている必要があります。

第三に、「昔ながらの方法」でコードを書く方が簡単に思えるかもしれませんが、コンパイラにとってはそう簡単ではありません。これは重要です。コンパイラが改訂されているため、従来のアプローチを改善する機会はほとんどありません。それらを拡張するためにコンパイラーに依存するラムダ (その他) は、コンパイラーが時間の経過とともにそれらをより適切に処理するため、利益を得ることができます。

総括する:

  1. 開発者はそれを処理できます
  2. みんなやってる
  3. 将来性がある

繰り返しますが、これが一般的な答えではないことはわかっています。そして、「シンプル イズ ベスト」が私のモットーでもあると信じてください。メンテナンスは、どのソースにとっても重要な側面です。わかった。しかし、私たちはいくつかの決まり文句の経験則で現実を覆い隠していると思います.

于 2013-09-11T12:27:03.487 に答える