Для создания наших тестовых данных мы используем следующий вариант шаблона Builder (упрощенный пример!):
Образец класса:
public class Person
{
public string Name { get; set; }
public string Country { get; set; }
}
Строитель:
public class PersonBuilder
{
private string name;
private string country;
public PersonBuilder()
{
SetDefaultValues();
}
private void SetDefaultValues()
{
name = "TODO";
country = "TODO";
}
public Person Build()
{
return new Person
{
Name = name,
Country = country
};
}
public PersonBuilder WithName(string name)
{
this.name = name;
return this;
}
public PersonBuilder WithCountry(string country)
{
this.country = country;
return this;
}
}
ПРИМЕЧАНИЕ. Контекст самого примера не имеет значения. Здесь важно то, как в этом примере класс построителя, такой как PersonBuilder, можно полностью сгенерировать, посмотрев на класс сущности (Person) и применив тот же шаблон - см. Ниже.
Теперь представьте, что класс person имеет 15 свойств вместо 2. Для реализации класса builder потребуется некоторая работа с обезьянами, хотя теоретически он может автоматически генерироваться из класса Person. Мы могли бы использовать генерацию кода, чтобы быстро настроить класс построителя, и добавить собственный код позже, если это необходимо.
Процесс генерации кода должен был бы учитывать контекст (имя и свойства класса person), поэтому простая генерация кода на основе текста или магия регулярных выражений здесь не чувствуются. Предпочтительным является динамическое, не основанное на тексте решение, которое можно быстро запустить из Visual Studio.
Я ищу лучший способ выполнить генерацию кода для подобных сценариев.
Отражение? CodeSmith? Шаблоны Т4? Resharper Live шаблоны с макросами?
Я с нетерпением жду удачных ответов :)