2017-11-07 15 views
0

CreateRequestのバリデータとUpdateRequestのバリデータがあります。FluentValidationsでの重複の回避

私はすぐにそれらが同じであることを発見しました。唯一の違いは、Id(UpdateRequest)があることです。

検証は同じプロパティーと同じですが、エンティティーは異なります。

ルールの複製を避けるにはどうすればよいですか?

現在、私は彼らがルール0

を除いて同じです

public class CreateValidator : AbstractValidator<CreateRequest> 
{ 
    RuleFor(p => p.Prop1)... // Rule 1 
    RuleFor(p => p.Prop2)... // Rule 2 
    RuleFor(p => p.Prop3)... // Rule 3 
} 

public class UpdateValidator : AbstractValidator<UpdateRequest> 
{ 
    RuleFor(p => p.Id)...  // Rule 0 
    RuleFor(p => p.Prop1)... // Rule 1 
    RuleFor(p => p.Prop2)... // Rule 2 
    RuleFor(p => p.Prop3)... // Rule 3 
} 

が、私は重複を避けることができますか?

答えて

1
  1. あなたCreateRequestUpdateRequestは、いくつかの基本クラス(または別の1)から継承されているのと同じインタフェースを実装していることを確認してください。

    public CreateRequest: Request{...} 
    public UpdateRequest: Request{...} 
    
  2. ジェネリック型パラメータが制限されたジェネリックバリデータークラスを作成します。

    public RequestValidator: AbstractValidator<T> where T: Request 
    { 
        RequestValidator() 
        { 
         RuleFor(p => p.Prop1)... // Rule 1 
         RuleFor(p => p.Prop2)... // Rule 2 
         RuleFor(p => p.Prop3)... // Rule 3 
        } 
    } 
    
  3. 継承を使用して実際のバリデータを作成します。

    public CreateRequestValidator: RequestValidator<CreteRequest> 
    { 
        CreateRequestValidator() 
        { } 
    } 
    public UpdateRequestValidator: RequestValidator<UpdateRequest> 
    { 
        UpdateRequestValidator() 
        { 
         RuleFor(p => p.Id)...   
        } 
    } 
    
関連する問題