0

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

4

1 回答 1

1

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

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

结果将如下所示:

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

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

于 2013-07-17T09:44:41.507 回答