En Java y C #, puede crear un objeto con propiedades que se pueden establecer en la inicialización definiendo un constructor con parámetros, definiendo cada propiedad después de construir el objeto o utilizando el patrón de interfaz de generador / fluido. Sin embargo, C # 3 introdujo inicializadores de objetos y colecciones, lo que significaba que el patrón de construcción era en gran medida inútil. En un lenguaje sin inicializadores, uno podría implementar un constructor y luego usarlo así:
Vehicle v = new Vehicle.Builder()
.manufacturer("Toyota")
.model("Camry")
.year(1997)
.colour(CarColours.Red)
.addSpecialFeature(new Feature.CDPlayer())
.addSpecialFeature(new Feature.SeatWarmer(4))
.build();
Por el contrario, en C # uno podría escribir:
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 }
}
}
... eliminando la necesidad de un generador como se ve en el ejemplo anterior.
Según estos ejemplos, ¿los constructores siguen siendo útiles en C #, o han sido reemplazados completamente por los inicializadores?
are builders useful
¿Por qué sigo viendo este tipo de preguntas? Un Builder es un patrón de diseño; claro, puede estar expuesto como una característica del lenguaje, pero al final del día es solo un patrón de diseño. Un patrón de diseño no puede ser "incorrecto". Puede o no cumplir con su caso de uso, pero eso no hace que todo el patrón sea incorrecto, solo la aplicación del mismo. Recuerde que al final del día los patrones de diseño resuelven problemas particulares: si no enfrenta el problema, ¿por qué trataría de resolverlo?