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

现货,谢谢!非常有帮助和精彩的解释。 –