Ich verwende häufig ein Muster, bei dem ich mithilfe der Methodenverkettung ein Objekt wie ein Builder
oder ein Prototype
Muster einrichte, aber nicht bei jedem Methodenaufruf neue Objekte erstelle, sondern das ursprüngliche Objekt ändere.
Beispiel:
new Menu().withItem("Eggs").withItem("Hash Browns").withStyle("Diner");
Ich frage mich nur, ob es einen Namen für dieses Muster gibt und ob es als Anti-Muster gilt, denn obwohl es flüssiger lesen kann, kann es zu langen Methodenketten führen.
design-patterns
coding-style
code-quality
patterns-and-practices
method-chaining
Garrett Hall
quelle
quelle
menu.withStyle("")
ohne Kontext auf. In diesem Fall benötigen Sie zwei APIs.Antworten:
Fließendes Interface
Ich habe immer davon gehört, dass diese Methode als " fließende Schnittstelle " bezeichnet wird, wie es Eric Evans (bekannt als Domain Driven Design ) und Martin Fowler (bekannt als Agile Manifesto ) prägten .
Die Hauptnachteile sind die Lesbarkeit (die manche lieben und manche hassen) und die Tatsache, dass das Debuggen in manchen Fällen schwieriger sein kann, da die gesamte Aktionskette als eine einzige Aussage betrachtet werden kann, wenn sie durchlaufen wird.
Ich halte es mit Sicherheit nicht für ein Anti-Pattern, obwohl ich die Technik selbst nur ein paar Mal angewendet habe.
quelle
Eine solche Verkettung von Methoden wird normalerweise als Fluent-Schnittstelle bezeichnet, wenn ein Fluss oder eine Auffindbarkeit in der Kette vorliegt. Alternativ können Sie sich eine API wie jQuery vorstellen, die sich stark auf die Verkettung von Methoden stützt, da sie nicht den gleichen Schwerpunkt auf die Auffindbarkeit legt, sondern der Einfachheit halber.
In Ihrem Beispiel (mit withx, withy) können Sie dies als Variante des Builder-Musters betrachten, da Sie eine spezielle Klasse haben, die bei bestimmten Zuständen (Methodenaufrufen) weiß, wie ein ordnungsgemäß konfiguriertes Objekt zurückgegeben wird.
Dies ist bei sachgemäßer Verwendung kein Anti-Pattern.
quelle
definitiv kein Anti-Pattern. jQuery ist wahrscheinlich die am häufigsten verwendete Implementierung.
Ja, aber was ist die Alternative? Sie können mit fast einem einfachen englischen Satz enden, wobei das API Sie zu dem führt, was verfügbar und angemessen ist.
quelle
Es heißt "Zugunglück" -Muster.
(Es ist ein Anti-Pattern und ist gegen Clean Code)
Das Muster "Zugunglück" verstößt gegen das Gesetz von Demeter .
quelle
a.getB().getC().doSomething()
. Dieses Beispiel ist schlecht, weil "Ihre Methode Methoden in ihren eigenen Feldern direkt aufrufen kann (aber nicht in den Feldern der Felder)". Hier gibt es nur 1 Objekt, das erstellt wird, und "Sie können mit Spielzeug spielen, das Sie selbst hergestellt haben".