2014-07-22 61 views
0

我有一个数据表,并且必须验证其中的每个字段。我已经将此代码重构为以下代码,但复杂度为15(!!)我应该将字典的类型设置为Key并将Func设置为Value?我会很感激的一些想法重构验证器的选择代码

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

此问题似乎是题外话题,因为它是关于审查工作代码。尝试http://codereview.stackexchange.com。 – CodeCaster

+0

_“我应该做类似字典的字典作为键和功能值?” - 是的,你可以做到这一点。 – CodeCaster

回答

0
  1. 带来这一点的if语句

    如果(validationField.Type == typeof运算(INT)){ 结果 = this.CheckIntegerAndNotNull(数据行[validationField.Name]的ToString()); } else if(validationField.Type == typeof(DateTime)) { result = this.CheckDateTimeAndNotNull(dataRow [validationField.Name] .ToString()); }

  2. 保存价值的DataRow [validationField.Name]局部变量(可能还有数据行[validationField.Name]的ToString())为ValidationField.Type

  3. 使用开关(您可能需要创建枚举)