使用Extract方法重构代码

时间:2013-07-17 09:20:18

标签: c# methods refactoring extract code-duplication

在我的应用程序中,我们有一个类,它在数据库中生成信息作为静态集中数据。这个类叫做'GenerateOwner'。在这个类中,我们创建了多个“FieldValidation”类型的条目。

        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 个答案:

答案 0 :(得分: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");

如果所有者国家/地区也需要更改,您也可以将其作为方法中的参数。