In Java und C # können Sie ein Objekt mit Eigenschaften erstellen, die bei der Initialisierung festgelegt werden können, indem Sie entweder einen Konstruktor mit Parametern definieren, jede Eigenschaft nach dem Erstellen des Objekts definieren oder das Schnittstellenmuster Builder / Fluid verwenden. In C # 3 wurden jedoch Objekt- und Sammlungsinitialisierer eingeführt, was bedeutete, dass das Builder-Muster weitgehend nutzlos war. In einer Sprache ohne Initialisierer könnte man einen Builder implementieren und ihn dann folgendermaßen verwenden:
Vehicle v = new Vehicle.Builder()
.manufacturer("Toyota")
.model("Camry")
.year(1997)
.colour(CarColours.Red)
.addSpecialFeature(new Feature.CDPlayer())
.addSpecialFeature(new Feature.SeatWarmer(4))
.build();
Umgekehrt könnte man in C # schreiben:
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 }
}
}
... ohne Builder, wie im vorherigen Beispiel gezeigt.
Sind Builder nach diesen Beispielen in C # noch nützlich oder wurden sie vollständig von Initialisierern abgelöst?
are builders useful
Warum sehe ich diese Art von Fragen immer wieder? Ein Builder ist ein Entwurfsmuster - sicher, es kann als Sprachmerkmal verfügbar gemacht werden, aber am Ende des Tages ist es nur ein Entwurfsmuster. Ein Entwurfsmuster kann nicht "falsch" sein. Es kann Ihren Anwendungsfall erfüllen oder nicht, aber das macht nicht das gesamte Muster falsch, sondern nur die Anwendung. Denken Sie daran, dass Designmuster am Ende des Tages bestimmte Probleme lösen. Wenn Sie sich dem Problem nicht stellen, warum sollten Sie dann versuchen, es zu lösen?