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

Ave*_*isG 6 c# unit-testing builder default-value

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

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

以为我在这里问哪一个更有效.

我这样做是这样的:

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

    private void SetDefaults()
    {
       // Setting my defaults
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种方式:

public class Builder
{     
    public Builder WithDefaults()
    {
       // Setting my defaults
    }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,第一个更有效,因为你只是创建你的构建器,它会自动为你做默认设置.

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

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

也许我错过了一些微妙的东西,所以我决定问你哪一个更有效的前进.

谢谢.

Dro*_*per 0

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

例如,看看这篇文章是如何完成的

相反,使用构造函数来设置默认值(存储它们的字段),并且仅在明确要求时才更改它们。这样,您就可以通过最少且有意义的构建器调用获得一个已初始化的对象。