テストデータを作成するために、次の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クラスに2ではなく15のプロパティがあると想像してください。ビルダークラスを実装するには多少の手間がかかりますが、理論的には、Personクラスから自動的に生成できます。コード生成を使用してビルダークラスをすばやく設定し、必要に応じて後でカスタムコードを追加できます。
コード生成プロセスはコンテキスト(personクラスの名前とプロパティ)を認識している必要があるため、単純なテキストベースのコード生成や正規表現の魔法はここでは感じられません。テキストベースではなく動的であり、VisualStudio内からすばやくトリガーできるソリューションが推奨されます。
このようなシナリオでコード生成を実行するための最良の方法を探しています。反射?コードスミス?T4テンプレート?マクロを使用したResharperLiveテンプレート?
私はいくつかの素晴らしい答えを見るのを楽しみにしています:)