Qual è il nome per l'idioma usando il metodo concatenato per costruire un oggetto?

21

Uso frequentemente uno schema in cui utilizzo concatenamento di metodi per configurare un oggetto, simile a Builder o Prototype pattern, ma non crea nuovi oggetti con ogni chiamata al metodo, invece di modificare l'oggetto originale.

Esempio:

new Menu().withItem("Eggs").withItem("Hash Browns").withStyle("Diner");

Chiediti solo se esiste un nome per questo pattern e se è considerato un anti-pattern, perché sebbene possa leggere più fluentemente, può portare a lunghe catene di metodi.

    
posta Garrett Hall 02.03.2012 - 15:46
fonte

4 risposte

36

Fluent Interface

Ho sempre sentito che questo metodo viene chiamato un'interfaccia fluente ", coniata da Eric Evans (di Domain Driven Design fame) e Martin Fowler (di Agile Manifesto la fama).

I principali svantaggi sono la leggibilità (che alcuni amano e alcuni odiano) e il fatto che in alcuni casi può essere più difficile eseguire il debug perché l'intera catena di azioni può essere considerata una singola istruzione quando la si passa attraverso. / p>

Certamente non lo considero un anti-pattern, anche se ho usato questa tecnica solo alcune volte.

    
risposta data 02.03.2012 - 15:50
fonte
5

Il concatenamento del metodo in genere viene chiamato Fluent Interface quando c'è un qualche tipo di flusso o individuabilità nella catena. In alternativa, puoi pensare a un api come jQuery che si basa molto sul concatenamento dei metodi come non "fluente" perché non c'è la stessa enfasi sulla reperibilità - è più per comodità.

Per il tuo esempio (usando withx, withy) puoi considerare questa una variante del pattern Builder perché hai una classe specializzata che, dato un certo stato (chiamate al metodo), sa come restituire un oggetto configurato correttamente.

Questo non è un anti-pattern se usato in modo appropriato.

    
risposta data 02.03.2012 - 17:09
fonte
3

whether it is considered an anti-pattern,

decisamente non un anti-modello. jQuery è probabilmente l'implementazione più utilizzata di questo.

because although it can read more fluently, it can lead to long method chains

Sì, ma qual è l'alternativa? Puoi finire con una semplice frase inglese, con l'api che ti guida verso ciò che è disponibile e appropriato.

    
risposta data 25.05.2012 - 11:50
fonte
-2

Si chiama modello "naufragio del treno".

(È un anti-pattern ed è contro Clean Code)

Il modello "naufragio del treno" viola la legge di Demeter .

    
risposta data 08.10.2018 - 21:12
fonte