Ho cercato un buon esempio di un modello di Builder (in C#), ma non riesce a trovare uno o perché non capisco il modello Builder o sto cercando di fare qualcosa che fosse mai inteso. Per esempio, se ho una macchina astratta e metodi di costruzione astratti per creare parti di automobili, dovrei essere in grado di inviare tutte le 30 delle mie scelte al regista, farlo costruire i pezzi che mi servono, quindi costruire la mia automobile. Indipendentemente dal tipo di auto, camion, semi, ecc. Prodotto, dovrei essere in grado di "guidarlo" esattamente nello stesso modo.Design: Builder
Il primo problema è la maggior parte degli esempi di valori di proprietà del codice rigido nelle parti in calcestruzzo, che penso che dovrebbero provenire da un database. Ho pensato che l'idea fosse di inviare le mie scelte al direttore (da una fonte di dati) e fare in modo che il costruttore creasse un prodotto personalizzato basato sui miei dati.
Il secondo problema è che voglio che i metodi builder creino effettivamente le parti, quindi le assegniamo al prodotto, non passiamo stringhe ma parti di prodotto fortemente tipizzate.
Ad esempio, desidero creare un modulo al volo disponendo di un modulo di compilazione per i campi del modulo, inclusa un'etichetta, una sezione di input, la convalida, ecc. In questo modo posso leggere l'oggetto dal mio ORM, controllare fuori i metadati dell'oggetto, passare questo al mio Builder e aggiungere il risultato del controllo utente appena creato al mio modulo web.
Tuttavia, ogni esempio di Builder che trovo ha solo dati hard coded invece di passare le scelte dal codice principale al Builder e dare il via a un prodotto personalizzato. Tutto sembra essere una grande affermazione di un caso statico. Ad esempio, se ho tre parametri con 10 scelte ciascuno, non voglio creare 30 metodi Concrete Builder, voglio creare solo quanto basta per produrre le proprietà richieste dal mio prodotto, che possono essere solo tre.
Sono tentato di avere il direttore solo nel codice principale. Ci dovrebbe essere un modo per determinare automaticamente quale metodo di builder concreto chiamare simile al polymorphism e agli overload dei metodi (sebbene questo sia un pessimo esempio) invece di usare un'istruzione case all'interno del pattern. (Ogni volta che ho bisogno di aggiungere un nuovo tipo di prodotto, ho bisogno di modificare il Director esistente, che è male).
forse, ciò che manca nel modello di builder, è che gli oggetti non vengono distrutti alla fine, quindi suggerisco di aggiungerlo più tardi se non hai inteso il modello ... – Tobias
Non proprio quello che vuoi, ma controlla questi articoli:
[la descrizione del modello] (http://sourcemaking.com/design_patterns/builder)
[esempio di implementazione C#] (http://sourcemaking.com/design_patterns/builder/c%2523)
Spero che questo aiuta. – 0x49D1