使用Extract方法重构代码

本文关键字:代码 重构 方法 Extract 使用 | 更新日期: 2023-09-27 18:23:45

在我的应用程序中,我们有一个类,它在数据库中生成作为静态集中数据的信息。此类称为"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方法,但我不确定如何在代码中实现它。提前谢谢。

使用Extract方法重构代码

Extract方法是一种重构方法,它将代码提取到自己的方法中。如果提取的零件需要参数,则将这些参数作为参数传递给方法。

在您的代码中,除了字段名称之外,代码完全相同;字段名称将是方法的参数。

结果如下:

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");

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