Я начал создавать конструктор, чтобы легко создавать тестовые данные для написанных модульных тестов.
Основная структура застройщика:
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, являются типами значений, а не ссылочные типы.