En Java et C #, vous pouvez créer un objet avec des propriétés qui peuvent être définies lors de l'initialisation en définissant un constructeur avec des paramètres, en définissant chaque propriété après la construction de l'objet ou en utilisant le modèle d'interface générateur / fluide. Cependant, C # 3 a introduit les initialiseurs d'objets et de collections, ce qui signifie que le modèle de générateur était largement inutile. Dans un langage sans initialiseurs, on pourrait implémenter un constructeur puis l'utiliser comme ceci:
Vehicle v = new Vehicle.Builder()
.manufacturer("Toyota")
.model("Camry")
.year(1997)
.colour(CarColours.Red)
.addSpecialFeature(new Feature.CDPlayer())
.addSpecialFeature(new Feature.SeatWarmer(4))
.build();
Inversement, en C # on pourrait écrire:
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 }
}
}
... éliminant le besoin d'un constructeur, comme le montre l'exemple précédent.
Sur la base de ces exemples, les générateurs sont-ils toujours utiles en C #, ou ont-ils été entièrement remplacés par les initialiseurs?
are builders useful
pourquoi je continue à voir ce genre de questions? Un générateur est un modèle de conception - bien sûr, il peut être exposé en tant que fonctionnalité de langage, mais en fin de compte, ce n'est qu'un modèle de conception. Un motif de conception ne peut pas être "faux". Il peut ou non répondre à votre cas d'utilisation, mais cela ne rend pas le modèle entier incorrect, juste son application. N'oubliez pas qu'à la fin de la journée, les modèles de conception résolvent des problèmes particuliers - si vous ne rencontrez pas le problème, alors pourquoi essayez-vous de le résoudre?