Per molti aspetti mi piace molto l'idea delle interfacce Fluent, ma con tutte le funzionalità moderne di C # (inizializzatori, lambda, parametri con nome) mi trovo a pensare, "ne vale la pena?", e "È questo il modello giusto da usare? ". Qualcuno potrebbe darmi, se non una pratica accettata, almeno la propria esperienza o matrice decisionale per quando utilizzare il modello Fluent?
Conclusione:
Alcune buone regole pratiche dalle risposte fino ad ora:
- Le interfacce fluenti aiutano notevolmente quando si hanno più azioni dei setter, dal momento che le chiamate traggono vantaggio dal contesto pass-through.
- Le interfacce fluenti dovrebbero essere pensate come uno strato sopra l'api, non l'unico mezzo di utilizzo.
- Le funzionalità moderne come lambda, inizializzatori e parametri denominati, possono funzionare mano nella mano per rendere ancora più amichevole un'interfaccia fluida.
Ecco un esempio di ciò che intendo per le caratteristiche moderne che lo rendono meno necessario. Prendiamo ad esempio un'interfaccia fluente (forse di scarso esempio) che mi consente di creare un Dipendente come:
Employees.CreateNew().WithFirstName("Peter")
.WithLastName("Gibbons")
.WithManager()
.WithFirstName("Bill")
.WithLastName("Lumbergh")
.WithTitle("Manager")
.WithDepartment("Y2K");
Potrebbe facilmente essere scritto con inizializzatori come:
Employees.Add(new Employee()
{
FirstName = "Peter",
LastName = "Gibbons",
Manager = new Employee()
{
FirstName = "Bill",
LastName = "Lumbergh",
Title = "Manager",
Department = "Y2K"
}
});
Potrei anche aver usato i parametri con nome nei costruttori in questo esempio.