現時点で使用しているソリューションがあります。私はFluent 検証を使用していますが、まだ慣れていません。私が持っている簡単なシナリオの例を挙げましょう。多分それは役立ちます。アドレス オブジェクト プロパティを持つユーザー クラスがあります。ある時点では、ユーザーの詳細 (名前、電子メール、パスワードなど) のみを検証し、別の状態ではユーザーの住所 (最初の行、郵便番号など) を検証したいと考えています。
クラスは次のようになります。
public class User {
public virtual string Name { get; set; }
public virtual string Email { get; set; }
public virtual string Password { get; set; }
public virtual Address Address { get; set; }
}
public class Address {
public virtual string Address1 { get; set; }
public virtual string PostCode { get; set; }
}
次に、アドレス用とユーザー用の 2 つの (簡略化された) バリデーターを用意します。
public AddressValidator() {
RuleFor(address => address.Address1)
.NotNull()
.WithMessage("Please enter the first line of your address");
RuleFor(address => address.PostCode)
.NotNull()
.WithMessage("Please enter your postcode")
.Matches(UK_POSTCODE_REGEX)
.WithMessage("Please enter a valid post code!");
}
public UserValidator() {
RuleFor(user => user.FirstName)
.NotNull()
.WithMessage("Please provide a first name")
.Length(3, 50)
.WithMessage("First name too short");
RuleFor(user=> user.Password)
.Length(8, 50)
.WithMessage("Password is too short");
}
次に、Model Validator を作成します。たとえば、ユーザーが住所を入力するフォームがあるとします。AddressModelValidator を作成し、作成したバリデータを再利用できます。
public AddressModelValidator() {
RuleFor(user => user.id)
.NotNull()
.WithMessage("An error has occured, please go back and try again");
RuleFor(user => user.Address).SetValidator(new AddressValidator());
}
したがって、少し考えれば、実際にいくつかの優れたモデルを作成し、検証コードの重複を減らすことができます!