2014-07-22 5 views
0

J'ai un datatable et je dois valider tous les champs qu'il contient. J'ai refactor ce code à ceci ci-dessous, mais une complexité est 15 (!) Devrais-je faire quelque chose comme dictionnaire avec le type comme clé et Func comme valeur? Je serais très reconnaissant pour quelques idéesRefactoriser un code de sélection un validateur

private bool CheckField(DataRow dataRow, ValidationField validationField) 
     { 
      bool result = false; 
      if (validationField.Requiered) 
      { 
       if (validationField.Type == typeof (int)) 
       { 
        result = this.CheckIntegerAndNotNull(dataRow[validationField.Name].ToString()); 
       } 
       else if (validationField.Type == typeof (DateTime)) 
       { 
        result = this.CheckDateTimeAndNotNull(dataRow[validationField.Name].ToString()); 
       } 
      } 
      else 
      { 
       if (validationField.Type == typeof (int)) 
       { 
        result = this.CheckIntegerOrNull(dataRow[validationField.Name].ToString()); 
       } 
       else if (validationField.Type == typeof(DateTime)) 
       { 
        result = this.CheckDateTimeOrNull(dataRow[validationField.Name].ToString()); 
       } 
       else if (validationField.Type == typeof(string)) 
       { 
        result = this.CheckStringOrNull(dataRow[validationField.Name].ToString(), 
         validationField.MaxLength.Value); 
       } 
       else if (validationField.Type == typeof(decimal)) 
       { 
        result = this.CheckDecimalOrNull(dataRow[validationField.Name].ToString()); 
       } 
      } 
      return result; 
     } 

public class ValidationField 
    { 
     public Type Type { get; set; } 
     public string Name { get; set; } 
     public bool Requiered { get; set; } 
     public int? MaxLength { get; set; } 
    } 
+1

Cette question semble être hors-sujet car il s'agit de réviser le code de travail. Essayez http://codereview.stackexchange.com. – CodeCaster

+0

_ "Dois-je faire quelque chose comme dictionnaire avec le type comme clé et Func comme valeur?" _ - oui, vous pouvez le faire. – CodeCaster

Répondre

0
  1. Conduis ce sur instruction if

    if (typeof validationField.Type == (int)) { résultat = this.CheckIntegerAndNotNull (dataRow [validationField.Name] .ToString()); } sinon if (validationField.Type == typeof (DateHeure)) { result = this.CheckDateTimeAndNotNull (dataRow [Nom du champ de validation] .ToString()); }

  2. Enregistrer valeur de datarow [validationField.Name] à la variable locale (peut-être datarow [validationField.Name] .toString()) Interrupteur

  3. d'utilisation pour ValidationField.Type (vous devrez peut-être créer Enum)