我已经开始构建一个构建器,以便我可以轻松地为我正在编写的单元测试创建测试数据。
构建器的基本结构是:
public class MyClassBuilder
{
public int id = 0; //setting the default value here
//allows MyClass to be built with a specific id
public MyClassBuilder WithId(int id)
{
this.id = id;
return this;
}
public MyClass Build()
{
return new MyClass(id);
}
}
那么这个模式的用法就变成了:
MyClass mc = new MyClassBuilder().WithId(5).Build();
我对此很满意......但我有疑问的是什么时候MyClass
有一个非平凡的属性......我有点不确定如何用默认值构造它。
public class MyClassBuilder
{
public int id = 0; //setting the default value here
//do I construct the default value using a MySecondClassBuilder?
public MySecondClass mySecondClass;
//allows MyClass to be built with a specific id
public MyClassBuilder WithId(int id)
{
this.id = id;
return this;
}
public MyClassBuilder WithMySecondClass(MySecondClass mySecondClass)
{
this.mySecondClass = mySecondClass;
}
public MyClass Build()
{
return new MyClass(id);
}
}
我的假设是我会创建一个构建器MySecondClass
并使用它来创建默认实现。
谁能确认我的假设是正确的并且是最佳实践?
我目前正在测试我的假设,但我想我会在 StackOverflow 上记录这个想法,因为我可以使用 google 找到的构建器模式的唯一示例只构建了值类型而不是引用类型的属性。