在建造建筑商时哪一个更有效?

时间:2015-04-21 15:05:14

标签: c# unit-testing default-value builder

注意:所有构建器仅用于单元测试。

所以我一直在创建构建器,因为我一直在创建它们,我已经开始注意到已经存在的其他一些构建器遵循了一些不同的模式。

我想在这里问哪一个更有效。

我这样做是这样的:

public class Builder
{
    public Builders()
    {
        SetDefaults();
    }

    private void SetDefaults()
    {
       // Setting my defaults
    }
}

另一种方式:

public class Builder
{     
    public Builder WithDefaults()
    {
       // Setting my defaults
    }
}

在我看来,第一个更有效,因为您只需创建构建器并自动为您执行默认设置。

在另一种情况下,您必须显式调用WithDefaults方法来设置所有默认值,然后再继续构建它。

第二个似乎更容易出错,因为一些需要构建的对象如果没有设置所有字段就会抛出空异常。

也许我错过了一些微妙的东西,所以我决定问你哪一个更有效。[/ p>

谢谢。

1 个答案:

答案 0 :(得分:0)

我想建议第三种选择。由于构建器应该通过以清晰且有意义的方式删除对象初始化来减少测试代码的数量 - 为什么声明您正在使用默认值? 它本身没有告诉实际的默认值是什么,你有测试作者忘记调用“WithDefaults”的风险。

查看this post for example on how it's done

而是使用构造函数来设置默认值(存储它们的字段),并且只有在明确要求时才更改它们。 这样,您可以使用最少且有意义的构建器调用来获取初始化对象。