2014-07-22 63 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. 使用開關(您可能需要創建枚舉)