ドメイン モデル パターン、DDD、およびその他の多くの設計パターンを利用するアプリケーションがあるとします。以下に示すように、いくつかのソリューションがあるとします。
- ソリューション.モデル
- Solution.Repository
- ソリューション.サービス
- Solution.Presentation
- ソリューション.UI.Web
ユーザー エクスペリエンス レイヤーは Solution.UI.Web であり、ASP.NET WebForms アプリケーションであると仮定します。クライアント側の検証をどのように実施しますか?
考慮すべき点がいくつかあります。
何よりもまず、検証エラーをクライアントに返すためにアプリケーション/データベース サーバーにアクセスする必要はありません。ただし、サーバー側の検証も実装できますが、クライアント側の検証も必要になります。 .
次に、ユーザー エクスペリエンス レイヤーに検証ルールを実装したくありません。これは、アプリケーションが WebApp であり、WinApp クライアントも作成することにした場合、検証ルールをもう一度実装する必要があるためです --> メンテナンスの悪夢です。
簡単な方法の 1 つは、ViewModel オブジェクト (クライアントに送信されるドメイン エンティティのフラット化されたビュー) を使用して検証ロジックを実装し、アプリケーション/データベース サーバーにアクセスする前にそれらのオブジェクトを検証することです。
さまざまなアプリケーションで何度も使用されている別のアプローチは、検証エラー メッセージのコレクションを生成し、そのコレクションをクライアントに送信するというものです。それは問題ありませんが、問題があります。特に大きなデータ入力フォームがある場合は、検証エラーの簡単な要約メッセージだけでは不十分です。
現在、ASP.NET MVC フレームワークにより、作業がはるかに簡単になります。EF + DataAnnotations を使用でき、MVC Scaffolding フレームワークがほとんどの作業を実行できます。ただし、MVC アプリケーションを作成し、jQuery と JavaScript を使用して検証ロジックを実装する場合は、これが当てはまります。
しかし、WinForms や WebForms など、さまざまなアプリケーションで利用および使用できる検証フレームワークを実装するための、より一般的なアプローチが必要な場合はどうでしょうか?
明確にするために、私が探しているのは、ドメインモデルで実装してクライアントアプリケーションに適用できる検証フレームワークを実装するための一連の設計パターン/原則および/または手法/フレームワークです。そして、壊れたルールなどに関する文字列エラー メッセージのコレクションを返すだけではなく、検証の失敗時にデータ バインドされたコントロール (TextBox、ComboBox、DateTimePicker など) を更新できるようにしたいと考えています。ユーザーエクスペリエンスレイヤーはより直感的になります(そうする場合)。
私はあちこちでいくつかの実装とフレームワークを見てきました.ASP.NET MVCクライアント側の検証をしばらく使用していたので、私の答えはMVCやJavaScriptの検証とは何の関係もありません.