2009-04-15 16 views
7

私は、主要なアプリケーションの検証フレームワークの1つを選択しようとしていますが、どちらのオプションも魅力的ですが、どちらか一方にコミットする前に知っておく必要のある賛否両論があるかどうかは疑問でした。どの検証フレームワークを選択するか:春の検証または検証アプリケーションブロック(Enterprise LIbrary 4.0)?

+0

ウェブまたはデスクトップ?あなたは他のentlibブロックを使用していますか?あなたはアーキテクチャを指定してくださいか? – boj

+0

これはWebアプリケーション向けです。私はアプリケーションで必要とされるように、セキュリティやロギングなどの他のentlibブロックを使用するかもしれません。私はUnityを使用しません。そのビットはSpring.NETによって処理されるため、 –

+1

私はSpring.NETに関する経験はありませんが、私はEntLibブロックの大ファンです。 http://weblogs.asp.net/ricardoperes/archive/2009/03/11/asp-net-validation-with-the-enterprise-library-validation-block.aspxとhttp://www.davidhaydenを読んでください。 .com/blog/dave/archive/2007/02/28/PropertyProx – boj

答えて

6

属性による検証は、私の見解では最良の解決策ではありません。まず、ドメインモデルでインフラストラクチャを参照する必要があります。第二に、コンパイルされたクラスにバリデーションを追加する機会がありません。最後に、複雑なロジックを属性で検証することはできず、Validateメソッドをエンティティにする必要があります。

私の意見では、検証は別のオブジェクトに分けられるべきです。たとえば、検証をルールとして定義できるIValidatorです。 xValのようなフレームワークを使用すると、プレゼンテーションレイヤーの検証をJavaScriptで行うことができます。

xValFluentValidation for .NETを探してください。 NHibernate Validator 1.2アルファは流暢な構文も持っていて、xValと統合されています(アルファについてはわからないが、1.0でなければならない)。

エンタープライズ検証ブロックにも負の側面はほとんどありません。私のエンティティのプロパティは3行の属性を持つことになり、読みやすさが悪化しました。 AND演算子またはOR演算子を使用して検証を追加しようとすると、非常に苦労します。

+1

検証アプリケーションブロックを属性とともに使用する必要はありません。構成ベースの検証アプローチが含まれています。この記事を読む:http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=46 – Steven

+1

Marekの説明と同じ理由で、属性ベースの設定よりも設定ベースの検証が好まれますが、VAB 5.0ではDataAnnotationsによって導入されたバディクラス技術を使用して検証を定義します。 – Steven

+0

xValはASP.NET MVC 1.0で使用され、現在は非推奨です –

3

エンタープライズライブラリブロックで見つけたことの1つは、必要としない/不要にする他のブロックを強制的に使用できることです。たとえば、検証ブロックでロギングブロックを使用することもできますが、独自のロギングシステムに満足しています。今あなたのアプリはさまざまな方法で物事を記録します。つまり、Ent LibのValidationブロックの外観が気に入っています。私はSpring.NETと遊んでいない。

+0

私は決して検証アプリケーションブロックでこの問題を抱えませんでした。 VABがログアプリケーションブロックを呼び出すコードまたは場所を指摘できますか? – Steven

+1

これを詳しく見てきましたが、エンタープライズライブラリの検証アセンブリからすべてのログアセンブリへの直接呼び出しはありません。私はあなたのアプリケーションが直接ロギング部分を使用したと思います。私のアプリケーションでは、VABに固有のアセンブリのみを公開します。 VAB 5.0の場合は、 'Common'、' Validation'、 'ServiceLocation'、' Unity'、 'Unity.Configuration'、' Unity.Interception'が必要です。 – Steven

+0

これは古いバージョンであった可能性があります。これを見たと思うと、エンタープライズライブラリのバージョン2.0でした。 – SteveM