Per molti aspetti mi piace molto l'idea delle interfacce Fluent, ma con tutte le funzionalità moderne di C # (inizializzatori, lambda, parametri nominati) mi trovo a pensare "ne vale la pena?" E "È questo lo schema giusto per uso?". Qualcuno potrebbe darmi, se non una pratica accettata, almeno la propria esperienza o matrice decisionale su quando usare il modello Fluent?
Conclusione:
Alcune buone regole empiriche dalle risposte finora:
- Le interfacce fluide sono di grande aiuto quando si hanno più azioni dei setter, poiché le chiamate beneficiano maggiormente del pass-through del contesto.
- Le interfacce fluide dovrebbero essere pensate come uno strato sopra una api, non l'unico mezzo di utilizzo.
- Le funzionalità moderne come lambda, inizializzatori e parametri nominati, possono lavorare mano nella mano per rendere un'interfaccia fluida ancora più amichevole.
Ecco un esempio di cosa intendo per caratteristiche moderne che lo rendono meno necessario. Prendi ad esempio un'interfaccia fluida (forse scarso) che mi consente di creare un dipendente come:
Employees.CreateNew().WithFirstName("Peter")
.WithLastName("Gibbons")
.WithManager()
.WithFirstName("Bill")
.WithLastName("Lumbergh")
.WithTitle("Manager")
.WithDepartment("Y2K");
Potrebbe essere facilmente scritto con inizializzatori come:
Employees.Add(new Employee()
{
FirstName = "Peter",
LastName = "Gibbons",
Manager = new Employee()
{
FirstName = "Bill",
LastName = "Lumbergh",
Title = "Manager",
Department = "Y2K"
}
});
In questo esempio avrei anche potuto usare parametri nominati nei costruttori.