2013-07-17 46 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

現貨,謝謝!非常有幫助和精彩的解釋。 –