2014-07-22 5 views
0

데이터 테이블이 있고 그 안에있는 모든 필드의 유효성을 검사해야합니다. 나는이 코드를 아래에 리팩토링하지만, 복잡성은 15이다 !! (!!) 타입으로 키와 펑션을 값으로 사용하여 사전과 같은 것을 만들어야 하는가? 나는 if 문유효성 검사기 선택 코드 리팩토링

경우 (validationField.Type == 대해서 typeof (int)를) { 결과 = this.CheckIntegerAndNotNull (몇 가지 아이디어

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

_ "키와 Func을 값으로 사용하여 사전 형식을 만들어야합니까?"- 예, 그렇게 할 수 있습니다. – CodeCaster

답변

0
  1. 에서이 문제를 가져 매우 감사하게 될 거라고 dataRow [validationField.Name] .ToString()); } else if (validationField.Type == typeof (DateTime)) { result = this.CheckDateTimeAndNotNull (dataRow [validationField.Name] .ToString()); }

  2. 저장 값의 DataRow [validationField.Name] 지역 변수 (아마 또한 DataRow를이 [validationField.Name]로 .toString()) ValidationField.Type에 대한

  3. 사용 스위치 (당신이 작성해야 할 수도 있습니다에 Enum)