2016-11-19 2 views
1

Fluent Validation을 사용하여 데이터를 조정하는 것이 적절합니까? 우리가 전화 번호 필드가 예를 들어 는 서비스 계층이 특정 정규식과 일치하는 모든 형식을 허용, 모든 아래 같은 수의 유효한 형식은 다음과 같습니다Fluent Validation을 사용하여 입력 형식을 유지하거나 입력을 조정하십시오.

나는 데이터베이스에 하나의 포맷을 유지하려는
+2 010 00011122 
+201000011122 
00201000011122 

, 그러나 모든 나의 클라이언트가 무엇이든을 사용하는 것을 허용하십시오. 나는 아래와 같이 검증으로 모델 값을 조작하는 생각을했다 :

RuleFor(m => m.Phone) 
      .NotEmpty().WithMessage(Common.ResourceFiles.Validation.Required) 
      .Matches("Constants.Regex.Phone").WithMessage(Common.ResourceFiles.Validation.InvalidFormat) 
      .DependentRules(d => d.RuleFor(m => m.Phone).Must(
       (model, phone) => 
       { 
        if (phone.StartsWith("+")) 
         model.Phone = model.Phone.Replace("+", "00"); 
        // Other changes here 
        return true; 
       })); 

그것은 그렇게하는 것은 합법적입니까? 그러한 논리를 시행해야하는 계층이 없다면?

답변

1

나는 그 길을 걷지 않을 것이고, 그것은 단일 책임 원칙을 검증하고 조정이 잘못되었을 때 버그를 찾기가 매우 어려울 것이다.

대신 당신은 쉽게 스위치를 켜거나 끌 수 있고, 가장 중요한 테스트를 할 수있는 친절한 살균 필터를 만들 수 있습니다. 이 경우 유효성 검사 논리가 더 간단 해집니다.

public class ContactSanitizer 
{ 
    public void Sanitize(ContactDto contact) 
    { 
     var phone = contact.Phone; 

     if (phone.StartsWith("+")) 
      contact.Phone = phone.Replace("+", "00"); 
    } 
} 
:

매우 순진 코드를 통해 아이디어를 얻을 냈다