2016-11-19 36 views
1

是否適合使用Fluent驗證來調整數據? 例如,我們有一個電話號碼字段,服務層接受其符合特定的正則表達式所有的格式,所有的下面都爲相同數量的有效格式:使用Fluent驗證來維護輸入格式或調整輸入

+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"); 
    } 
}