Manchmal (selten) scheint es der beste Weg zu sein, eine Funktion zu erstellen, die eine angemessene Menge von Parametern benötigt.
Die Verwendung mehrerer Parameter ist häufig ein eindeutiger Hinweis darauf, dass Sie bei dieser Methode gegen die SRP verstoßen . Es ist unwahrscheinlich, dass eine Methode, die viele Parameter benötigt, nur eines tut. Excpetion kann eine mathematische Funktion oder eine Konfigurationsmethode sein, bei der tatsächlich mehrere Parameter als solche benötigt werden. Ich würde mehrere Parameter vermeiden, da der Teufel das Weihwasser meidet. Je mehr Parameter Sie in einer Methode verwenden, desto höher ist die Wahrscheinlichkeit, dass die Methode (zu) komplex ist. Je komplexer, desto schwieriger zu warten und desto weniger wünschenswert.
Allerdings habe ich das Gefühl, dass ich die Reihenfolge der Parameter oft nach dem Zufallsprinzip wähle. Normalerweise gehe ich nach "Reihenfolge der Wichtigkeit" vor, wobei der wichtigste Parameter an erster Stelle steht.
Im Prinzip wählen Sie nach dem Zufallsprinzip . Natürlich könnte man denken, dass Parameter A relevanter ist als Parameter B ; Dies ist jedoch möglicherweise nicht der Fall für Benutzer Ihrer API, die B für den relevantesten Parameter halten. Selbst wenn Sie bei der Auswahl der Bestellung aufpassen, kann dies für andere zufällig erscheinen .
Gibt es einen besseren Weg, dies zu tun? Gibt es eine "Best Practice" -Methode zum Ordnen von Parametern, die die Übersichtlichkeit erhöht?
Es gibt verschiedene Möglichkeiten:
a) Der triviale Fall: Verwenden Sie nicht mehr als einen Parameter.
b) Da Sie nicht angegeben haben, welche Sprache Sie gewählt haben, besteht die Möglichkeit, dass Sie eine Sprache mit benannten Parametern gewählt haben . Dies ist ein schöner syntaktischer Zucker , mit dem Sie die Bedeutung der Reihenfolge der Parameter lockern können:fn(name:"John Doe", age:36)
Nicht jede Sprache erlaubt solche Feinheiten. Und was dann?
c) Sie könnten ein Dictionary / Hashmap / Associative Array als Parameter verwenden: zB würde Javascript folgendes erlauben: fn({"name":"John Doe", age:36})
welches nicht weit von (b) entfernt ist.
d) Natürlich, wenn Sie mit einer statisch typisierten Sprache wie Java arbeiten. Sie könnten eine Hashmap verwenden , verlieren jedoch die Typinformationen (z. B. beim Arbeiten mit HashMap<String, Object>
), wenn Parameter unterschiedliche Typen haben (und umgewandelt werden müssen).
Der nächste logische Schritt wäre die Übergabe eines Object
(wenn Sie Java verwenden) mit entsprechenden Eigenschaften oder etwas Leichterem wie einer Struktur (wenn Sie z. B. C # oder C / C ++ schreiben).
Faustregel:
1) Bester Fall - Ihre Methode benötigt überhaupt keinen Parameter
2) Guter Fall - Ihre Methode benötigt einen Parameter
3) Tolerierbarer Fall - Ihre Methode benötigt zwei Parameter
4) Alle anderen Fälle sollten überarbeitet werden
MessageBox.Show
. Schauen Sie sich das auch an.