簡體   English   中英

避免在FluentValidations中重復

[英]Avoiding duplication in FluentValidations

我有一個用於CreateRequest的驗證器,另一個用於UpdateRequest的驗證器。

我很快發現它們是相同的。 唯一的區別是一個具有Id( UpdateRequest )。

驗證是相同的,具有相同的屬性,但是實體不同。

如何避免重復規則?

目前我有

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
}

除了規則0外,它們相同。

我可以避免重復嗎?

  1. 確保您的CreateRequestUpdateRequest實現相同的接口,該接口是從某個基類(或從另一個基類)繼承的。

     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)... } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM