2013-07-17 2 views
0

제 애플리케이션에는 정적 중앙 데이터로 데이터베이스 내에서 정보를 생성하는 클래스가 있습니다. 이 클래스는 'GenerateOwner'라고합니다. 이 클래스 내에서 우리는 'FieldValidation'유형의 여러 항목을 작성합니다.Extract 메소드로 코드 리팩토링

 FieldValidation swedishFieldValidation1 = new FieldValidation 
     { 
      IsRequired = false, 
      DataType = "String", 
      Length = 0, 
      Min = 0, 
      Max = 255, 
      FieldValidationType = _bancPaydatabase.FieldValidationTypes.FirstOrDefault(o => o.FieldName == "InvoiceNumber"), 
      IsVisible = true, 
      Owner_Country = swedishOwnerCountry 
     }; 

     FieldValidation swedishFieldValidation2 = new FieldValidation 
     { 
      IsRequired = false, 
      DataType = "String", 
      Length = 0, 
      Min = 0, 
      Max = 255, 
      FieldValidationType = _bancPaydatabase.FieldValidationTypes.FirstOrDefault(o => o.FieldName == "InvoiceTypeId"), 
      IsVisible = true, 
      Owner_Country = swedishOwnerCountry 
     }; 

등등. 매우 비슷한 항목이 20 개 정도 있습니다. 내 질문은, 어떻게 내가 같은 코드를 반복해서 반복하는 것을 막기 위해이 코드를 리펙토링하는 것이 가장 좋을까요? Extract 메서드를 가리키고 있지만이 코드를 구현하는 방법을 잘 모르겠습니다. 미리 감사드립니다.

+1

Extract 메서드는 VS에 있습니다. Ctrl + R, E (또는 Ctrl + E) iirc. –

답변

1

Extract method은 코드를 자체 메서드로 추출하는 리팩토링 메서드입니다. 추출 된 파트에 매개 변수가 필요한 경우 매개 변수로 메서드에 전달됩니다.

코드에서 코드는 필드 이름을 제외하고 완전히 동일합니다. 필드 이름은 메소드의 매개 변수가됩니다.

결과는 다음과 같습니다

private FieldValidation CreateFieldValidation(string fieldName) 
{ 
    return new FieldValidation 
    { 
     IsRequired = false, 
     DataType = "String", 
     Length = 0, 
     Min = 0, 
     Max = 255, 
     FieldValidationType = 
      _bancPaydatabase.FieldValidationTypes 
          .FirstOrDefault(o => o.FieldName == fieldName), 
     IsVisible = true, 
     Owner_Country = swedishOwnerCountry 
    }; 
} 

사용이 될 것 지금과 같이 : 소유자 나라도 변경해야

FieldValidation swedishFieldValidation1 = CreateFieldValidation("InvoiceNumber"); 
FieldValidation swedishFieldValidation2 = CreateFieldValidation("InvoiceTypeId"); 

경우, 당신은 또한 매개 변수에 만들 것 방법.

+0

스폿이 켜져있어, 고마워! 매우 유익하고 훌륭하게 설명되었습니다. –