In Java e C #, è possibile creare un oggetto con proprietà che possono essere impostate all'inizializzazione definendo un costruttore con parametri, definendo ciascuna proprietà dopo aver costruito l'oggetto o utilizzando il modello di interfaccia builder / fluid. Tuttavia, C # 3 ha introdotto gli inizializzatori di oggetti e collezioni, il che significava che il modello del costruttore era in gran parte inutile. In un linguaggio senza inizializzatori, si potrebbe implementare un builder e usarlo in questo modo:
Vehicle v = new Vehicle.Builder()
.manufacturer("Toyota")
.model("Camry")
.year(1997)
.colour(CarColours.Red)
.addSpecialFeature(new Feature.CDPlayer())
.addSpecialFeature(new Feature.SeatWarmer(4))
.build();
Al contrario, in C # si potrebbe scrivere:
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 necessità di un costruttore come mostrato nell'esempio precedente.
Sulla base di questi esempi, i costruttori sono ancora utili in C # o sono stati completamente sostituiti dagli inizializzatori?
are builders useful
perché continuo a vedere questo tipo di domande? Un Builder è un modello di progettazione - certo, può essere esposto come una caratteristica del linguaggio ma alla fine è solo un modello di progettazione. Un modello di progettazione non può essere "sbagliato". Potrebbe soddisfare o meno il tuo caso d'uso, ma ciò non rende sbagliato l'intero schema, ma solo la sua applicazione. Ricorda che alla fine della giornata i modelli di progettazione risolvono particolari problemi: se non li affronti, perché dovresti provare a risolverli?