JavaおよびC#では、パラメーターを使用してコンストラクターを定義するか、オブジェクトの作成後に各プロパティを定義するか、ビルダー/流体インターフェイスパターンを使用して、初期化時に設定できるプロパティを持つオブジェクトを作成できます。ただし、C#3ではオブジェクトとコレクションの初期化子が導入されたため、ビルダーパターンはほとんど役に立たなかった。イニシャライザのない言語では、ビルダーを実装して次のように使用できます。
Vehicle v = new Vehicle.Builder()
.manufacturer("Toyota")
.model("Camry")
.year(1997)
.colour(CarColours.Red)
.addSpecialFeature(new Feature.CDPlayer())
.addSpecialFeature(new Feature.SeatWarmer(4))
.build();
逆に、C#では次のように記述できます。
var vehicle = new Vehicle {
Manufacturer = "Toyota",
Model = "Camry",
Year = 1997,
Colour = CarColours.Red,
SpecialFeatures = new List<SpecialFeature> {
new Feature.CDPlayer(),
new Feature.SeatWarmer { Seats = 4 }
}
}
...前の例のようにビルダーの必要性を排除します。
これらの例に基づいて、ビルダーはまだC#で有用ですか、それともイニシャライザによって完全に置き換えられましたか?
are builders useful
なぜ私はこの種の質問を見続けるのですか?Builderはデザインパターンです。言語機能として公開される可能性がありますが、結局のところ、それは単なるデザインパターンです。デザインパターンは「間違っている」ことはできません。それはあなたのユースケースを満たすかもしれませんし、そうでないかもしれませんが、それはパターン全体を間違っているのではなく、それを適用するだけです。結局のところ、デザインパターンは特定の問題を解決することを忘れないでください。問題に直面しないのであれば、なぜそれを解決しようとするのでしょうか。