Fluent Validationとデータアノテーションの比較[終了]


123

ASP.NET MVC検証に使用した場合、これら2つの検証パッケージの動作上の違いは何ですか?それらは、オブジェクト名に至るまで、同様のオブジェクトを持っているようです。互いに関連していますか?それらの違いは何ですか?これらの違いは、異なる方法でどのように表されますか?


52
建設的ではないため閉じられた質問は、通常、多くの賛成票を持っているので、注目に値するので、それらは実際に人々に役立ちます。このことについて何か問題があるはずです
Dmitry Efimenko

2
この種の質問は有用であることに同意しますが、以下の回答は事実ではなく意見のようです。
Ian Warburton 2013年

3
私も完全に同意しますが、「あなたの好みは何ですか」ではなく「違いは何ですか」と尋ねることで状況が回避されたでしょう。
Jeremy A. West

取引は、回答が事実に基づくものではなく意見に基づくものではないように、あなたがそれを言葉で書かなければならないことだと思います。「あなたのお気に入りは何ですか?」と質問しないでください。しかし、「操作上の違いは何ですか?」そうすると、「私は流暢な検証を好む」のような答えが得られません。代わりに、フォアグラウンドの違いを最初に確認し、次に結果を提示するもの。
ルフィン

回答:


113

私は流暢な検証を好む:

  1. 検証ルールをはるかによく制御できます
  2. さまざまなプロパティに対して条件付き検証を行うことは、データ注釈に比べてはるかに簡単です。
  3. 検証をビューモデルから分離します
  4. ユニットテストはデータアノテーションに比べてはるかに簡単です
  5. ほとんどの標準的な検証ルールに対して優れたクライアント側検証サポートを備えています

6
この記事(webdevbros.net/2010/12/03/…)の記事からさらにいくつかのポイント:1.注釈が多すぎると、モデルが見苦しくなります(ポイント3と同様)。 )
SiberianGuy

2
@Idsaパフォーマンスポイントは怪しげに聞こえます。反射はモデルごとに1回だけ発生する必要があります。これは適切な実装を前提としていますが、この特定の実装がどのように機能するかはわかりません。
CodesInChaos

@CodeInChaos、あなたは正しいようです。しかし、それがどのように実装されているかもわからない(そして見つけるのに時間がかかる)ので、私はそれをそのままにしておきます。
SiberianGuy

2
私はFluentValidationを2番目に使用しています。コードOCDの観点から見ると、ビューから検証の責任が取り除かれ、独自のクラスが与えられることが大好きです。MVC1でしばらくの間xValを試してみました...データアノテーションは単純なものでは大丈夫ですが、ひと握り以上のルールを取得すると、ViewModelが何を表すことになっているかほとんどわかりません。
ブランドンリントン、2011

@ダーリンビューでエラーメッセージをどのように渡しますか?それを行う方法の例を提供できますか?
ハイメサンキャップ2014

32

私は明らかにデータ注釈を好む...

  1. すべての検証ルールは、コード内の1つの場所(モデルメタデータクラス内)構成でき、他の場所で繰り返す必要はありません。
  2. データアノテーション属性を使用する場合は、クライアント側の検証が(また、検証ルールを繰り返さずに)優れたサポートが提供されます
  3. データアノテーション属性をテストして、それらが存在することを確認できます。
  4. コミュニティによって作成された素晴らしい追加の検証属性があります(例:Data Annotations Extensions)。

2
これらのプロパティのほとんどは、なんらかの形式の流暢な検証で達成できると思います。OPのライブラリがこれをサポートしているかどうかはわかりませんが、原則的には可能であり、それほど難しくはありません。
CodesInChaos

属性の存在をテストするポイントは何ですか?基本的にそれは検証ルールを繰り返すのではないですか?
サム

30
@Sam:プロパティがデータアノテーション属性で装飾されているかどうかをテストすることで、属性自体の機能をテストしません。そこにあることを確認しているだけです。2年後の今、私はダーリンの側にいて、彼の答えに同意します。
Marius Schulz 2013年

@Sam、おそらく誰かがモデルから削除したかどうかを知りたいからです。
スティーブ

3
素晴らしいコメントマリウス。今日のほとんどのEFチュートリアルは、データアノテーションを使用して行われた検証を示しています。私も最初はアノテーションの単純さに夢中になりましたが、カスタム検証ルールを実装しようとした直後に、私はすぐにチームのFluent Validationにジャンプしました... StackOverflowでの彼のコメントは5年以上後にスポットされています!!!
Koshera '
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.