Methodennamen mit fließender Oberfläche

7

Ich habe eine Permissions -Klasse in Java mit Methoden in fließendem Stil wie folgt:

%Vor%

Die Frage ist, ob ich diese Methoden set{Property} oder nur {property} nennen sollte. Letzteres würde so aussehen:

%Vor%

Wenn ich mir diese Methoden einzeln anschaue, würde ich erwarten, dass read etwas liest, aber andererseits ist es näher an der Absicht, so etwas wie benannte Parameter wie in Scala zu haben:

%Vor%     
deamon 19.03.2010, 09:52
quelle

4 Antworten

7

set{Property} ist besser als nur {property} für die Übermittlung von Absicht. Da Ihre Beispiele jedoch einfache boolesche Eigenschaften sind, könnte eine noch bessere fließende Interferenz folgende sein:

%Vor%     
Paolo 19.03.2010, 10:02
quelle
6

Dies ist ein klassisches Problem mit fließenden Schnittstellen. Während ich @Bozho zustimme, dass setRead () selbsterklärender ist, besteht das Ziel bei fließenden Interfaces darin, den gesamten "Satz" lesbar zu machen, anstatt einzelne Methodenaufrufe lesbar zu machen.

Ich würde also einen Schritt weiter gehen. Wie wäre es mit:

%Vor%

Siehe auch Martin Fowlers Post zu diesem Thema. Er sagt: "Der Aufbau einer solchen flüssigen API führt zu einer ungewöhnlichen API-Angewohnheit"

    
Itay Maman 19.03.2010 10:03
quelle
5

set{Property} definitiv. Es zeigt an, was die Methode macht. Stellen Sie sich vor, Ihre Immobilie heißt visible oder encoding oder algorithm . Die Verwendung von set macht keinen Sinn.

Sie können aussagekräftigere Aktionsnamen verwenden, die sich vom Namen der Eigenschaft unterscheiden. Zum Beispiel:

visible - & gt; show(..)
encoding - & gt; encode(..)
read & gt; makeReadable(..)
name - & gt; giveName(..) ("name" ist ein Verb, ist aber mehrdeutig)

    
Bozho 19.03.2010 09:59
quelle
1

Die set beeinträchtigt eindeutig die Klarheit. Sie sind nicht wirklich Bohnen-ähnliche Methode, also sage ich es fallenlassen.

Ich würde auch empfehlen, den Builder vom Produkt zu trennen. Bevorzugen Sie Unveränderlichkeit im Produkt.

Wenn Sie Flags haben, denke ich, dass es viel besser ist, boolesche Methoden als Methodenpaare zu verwenden. Die Java-Bibliothek hat diese Änderung von 1.0 auf 1.1 geändert. Trotzdem mag ich Booleans nicht. In true und false gibt es keine wesentlich höhere Bedeutung. enum s sind besser. Besser noch, wenn Sie über etwas sprechen, das als eine Menge betrachtet werden kann (wie im Beispiel), dann verwenden Sie Set (wahrscheinlich als EnumSet implementiert).

    
Tom Hawtin - tackline 19.03.2010 14:37
quelle