Beneficio dell'uso della classe di builder interna statica

9

Durante la stesura delle linee guida del codice per un'azienda mi sono trovato a consigliare l'utilizzo del schema Builder da Java efficace, invece di costruttori telescopici.

Tuttavia, dopo averci pensato un po 'di più, sicuramente una soluzione più elegante è semplicemente rimuovere la classe builder e rimuovere anche i costruttori aggiuntivi con argomenti opzionali.

Quindi basta avere il costruttore con i parametri richiesti, i normali getter / setter e commentare il codice. Quando si implementa, basta creare una nuova istanza di oggetto yr quindi impostare i valori.

Il mio pensiero originale era il vantaggio derivato dall'eliminazione della confusione su quali parametri fossero facoltativi e quali fossero necessari; tuttavia, il vero vantaggio deriva dall'uso dell'interfaccia method chaining / fluent.

Il modello di builder ha dei vantaggi quando si creano molte nuove istanze in quanto l'ide può fare il lavoro con le gambe e anche se ci sono molti (15+) parametri opzionali. Tuttavia, vale la pena dedicare del tempo extra alla codifica della classe interna statica, consiglieresti di usare il builder o è una perdita di tempo?

    
posta NimChimpsky 05.11.2011 - 10:34
fonte

2 risposte

8

Tendo a seguire uno schema in base al quale i costruttori devono fornire tutti i valori obbligatori necessari per creare un oggetto valido e coerente . Per i valori facoltativi, provo a pensare a quale dovrebbe essere il default più comune, in modo che i setter vengano utilizzati il meno possibile.

Se trovo che ci sono molti valori opzionali o che una maggiore proporzione di valori opzionali tende a essere alterata dai loro valori predefiniti, allora userò il modello di builder (builder interno statico o altro disegno simile).

Josh in genere dà consigli davvero buoni - la cosa migliore che mi piace di lui è che il consiglio proviene dalle trincee - si ammette di aver commesso degli errori nella progettazione di parti di Java, e l'efficacia di Java è in parte una specie di sua cura 'per così dire: -)

    
risposta data 05.11.2011 - 11:03
fonte
6

Il pattern Builder di Josh Bloch, molto simile a GoF Builder Pattern, offre un modo di creare un oggetto immutable con molti dati predefiniti senza lunghi elenchi di costruttori concatenati.

Se "hai il costruttore con i parametri richiesti, getter / setter normali", il tuo oggetto non è più immutabile. vale a dire. Puoi cambiarlo molto dopo averlo istanziato.

Se questo non è un problema per te allora non hai mai avuto bisogno del modello di Builder in primo luogo. Se si tratta di un problema, la soluzione è difettosa.

    
risposta data 05.11.2011 - 14:24
fonte

Leggi altre domande sui tag