私が取り組んでいる WPF プロジェクトでは、ビュー モデルのプロパティの属性を介してデータ検証を実装することを検討しています。
例:
[RegexConstraint("^[A-Z][a-zA-Z]+$")]
public string Name
{
set
{
_name = value;
OnPropertyChanged("Name")
}
}
すべてのビュー モデルは、IDataErrorInfo を実装する共通の ViewModelBase クラスから継承します。インデクサー:
string IDataErrorInfo.this[string columnName]
名前でプロパティを取得します (リフレクションを使用)。
var properties = GetType().GetProperties().Where(p=> p.Name == "someName")
すべての制約属性を検索します...
private static ICollection<IValidator> GetValidations(PropertyInfo property)
{
return (ValidationAttribute[])property.GetCustomAttributes(typeof(ValidationAttribute), true))
.Select(va => new AttributeValidator(va)).Cast<IValidator>().ToList();
}
...そして検証を実行します
うまくいくようですが、私の質問は、同様の手法を使用した経験がある人はいますか? それは悪い考えですか?
これにより、コードがよりクリーンで簡潔に見えるようになり、すべてのビュー モデル クラスで IDataErrorInfo を実装する必要がなくなりますが、一方で、検証ロジックがプロパティに依存している場合に、きれいなユーザー メッセージを作成する方法という新しい問題が発生します。ハードコーディングされたメッセージを使用するのではなく、名前/属性名を使用します-私が見つけることができたすべての IDataErrorInfo の例のように。
要約すると、私の質問は、この道を進み続ける必要があるか、それとも別の検証スキームを使用する必要があるかということです。