2016-11-19 4 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"); 
    } 
} 
関連する問題