2016-06-15 9 views
3

MVCの検証でオンラインの例で見た最も一般的なアプローチは、ViewModelを使用してデータを検証することです。人々はデータ注釈を使用するか、IValidatableObjectとIClientValidatableインターフェイスを実装します。しかし、それは単一の責任原則を破るものではありませんか? ViewModelが実際に検証を行うべきか?ASP.NET MVC ViewModelの検証と単一の責任原則

私が考えていたアプローチの1つは、別のバリデータクラスを作成し、それをコントローラからModelState辞書に渡すことでした。このアプローチの欠点は、IClientValidatableインターフェイスを実装し、JQuery検証ライブラリを使用して簡単なクライアント側検証を実行できなくなることです。

SOLIDの原則を破ることなく、MVCでViewModel検証を実装する正しい方法は何でしょうか?

+1

検証には2つのレベルがあります。単純な正式な検証では、サーバー側でクライアント側またはデータ注釈を実装できます。そして、他のデータ/他のシステムへの複数の依存関係を伴う高価なビジネス検証。私は通常、 "どちらか/または"がなく、むしろ両方を必要とすると思います。 –

答えて

1

カスタム検証属性を作成することは可能です。 JavaScriptコードのスニペットを実装する場合でも、unobtrusive client side validationを達成できます。カスタム属性では、バリデータクラスインスタンスを挿入できます。

つまり、View(-Model)でのみ、単純な検証ルール(必須フィールド、長さなど)を確保するのがよいと思います。 this (old and now mainly obsolete) blog entry Steveは、ルールが連続的に実施される「連続スペクトル」として、検証の段階を記述しています。あなたはそのエントリからいくつかのアイデアをつかむことができます。希望が役立ちます。

1

いいと思います。どのようなクラスが有効なクラスになっているのかをクラスが知っていることは、まったく問題ではありません。さらに、実装が非常に柔軟で合理的になります。

デザイン思考を適用する際には常にトレードオフがあります。 purestフォームでそれらを実装するには、時にはそれが実現できないことがあり、時には独自の制約を持つ過剰に設計されたコードにつながる可能性があります。

たとえば、本は非常に簡単ですが、理解と定義はです。の責任は実際には仕事です。ある人にとって、DBとのコミュニケーションはSRであるかもしれませんが、それだけではないことを知っています。もっと掘り下げれば、もっと多くの責任があります。 一方、私たちがプリンシパルを純粋な形で見れば、クラス内にメソッドを持つことはできません。

ほとんどの解決策では、私は個人的には、そのメロディのために十分に弦を締めたいと思っています。合理的に平衡状態にある。

関連する問題