2016-11-19 2 views
1

Est-il approprié d'utiliser la fonction de validation active pour modifier les données? Par exemple, nous avons un champ de numéro de téléphone, la couche de service accepte tous les formats correspondant à un certain Regex, tous les ci-dessous sont des formats valides pour le même numéro:Utilisez la validation active pour gérer les formats d'entrée ou modifier l'entrée.

+2 010 00011122 
+201000011122 
00201000011122 

Je veux maintenir un format dans la base de données, cependant permettre à tous mes clients d'en utiliser. Je pensais à manipuler la valeur de modèle lors de la validation comme ci-dessous:

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

Est-il légal de le faire? Sinon, quelle couche devrait imposer une telle logique?

Répondre

1

Je n'irais pas dans cette direction, cela validerait le principe de la responsabilité unique et serait très déroutant de trouver des bogues au cas où vos réglages seraient erronés.

À la place, Vous pouvez créer un filtre de désinfection de type aimanté, que vous pouvez facilement activer/désactiver, et surtout tester. Votre logique de validation dans ce cas deviendrait également plus simple.

code très naïve ciselée pour obtenir idée à travers:

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

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