同じモデルに対して異なる検証セットを必要とするプロジェクトに取り組んでおり、それを処理するための最良のソリューションを見つけようとしています。
簡単な例として、お客様のDTOを使用する場合があります。
public class Customer
{
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required] // Only required on some views
public string Title { get; set; }
}
最初のビューでは、DataAnnotationsを使用してDTOに表示されるため、すべてのフィールドが必須です。
2番目のビューでは、FirstNameとLastNameが必須である場合がありますが、Titleはオプションであり、ビューに表示されない場合もあります。
複雑な問題が発生します。検証ルールをサービスレイヤーに配置し(同じ検証を利用して後でAPIを提供できるようにするため)、データアノテーションにアクセスし、それらに対して検証して、バックアップを報告します。検証されない場合はUIに移動します。
これまでのところ、勝利の方法は次のとおりです。
- すべてのビューには、DataAnnotationsが存在する専用のビューモデルがあります。
- 次に、ビューモデルはAutomapperなどを使用してドメインオブジェクトをマップします。
- 次に、ドメインオブジェクトはリポジトリとサービスに渡され、アクションが実行されます。
これは次のことも意味します。
- オブジェクトがそこに到達するまでに、オブジェクトはビューモデルではなくドメインオブジェクトになるため、検証はサービスレイヤーでは行われません。
エンタープライズアプリケーションでこれを処理するためのより良い方法はありますか?私たちはまだ解決策を見つけていません。