注意:所有构建器仅用于单元测试。
所以我一直在创建构建器,在创建它们的过程中,我开始注意到其他一些已经就位的构建器遵循一些不同的模式。
我想在这里问哪个更有效。
我的做法是这样的:
public class Builder
{
public Builders()
{
SetDefaults();
}
private void SetDefaults()
{
// Setting my defaults
}
}
另一种方式是:
public class Builder
{
public Builder WithDefaults()
{
// Setting my defaults
}
}
在我看来,第一个更有效,因为您只需创建构建器,它就会自动为您进行默认设置。
在另一种情况下,您必须在继续构建它之前显式调用 WithDefaults 方法来设置所有默认值。
第二个似乎更容易出错,因为一些需要构建的对象如果没有设置所有字段,可能会抛出 null 异常。
也许我在这里漏掉了一些微妙的东西,所以我决定问你哪一个更有效地向前推进。
谢谢。
最佳答案
我想建议第三种选择。由于构建器应该通过以清晰且有意义的方式删除对象初始化来减少测试代码的数量 - 为什么要声明您正在使用默认值? 它本身并没有说明实际的默认值是什么,而且您有测试编写者忘记调用“WithDefaults”的风险。
看看this post for example on how it's done
而是使用构造函数来设置默认值(存储它们的字段),并且只有在明确要求时才更改它们。 这样您就可以通过最少且有意义的构建器调用获得一个已初始化的对象。
关于c# - 哪一个在构建构建器时更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29776078/