nach Gibt es Richtlinien, wie viele Parameter eine Funktion übernehmen sollte? sollte eine Methode nicht zu viele Parameter haben. Einige Antworten deuten jedoch darauf hin, dass dieses Problem durch das Builder-Muster gelöst werden kann:
Builder b=new Builder();
b.setParm1("a");
b.setParm2("b");
.
.
.
Obj obj=b.createObj();
oder kapseln Sie Parameter in ein einzelnes Objekt.
ObjectParam op=new ObjectParam();
op.param1="a";
op.param2="b";
.
.
.
obj.f(op);
Ich bezweifle jedoch, dass dies das Problem löst, da ich denke, dass die Methoden zum einfachen Ausrichten der Parameter besser sind (dh von horizontal nach vertikal), aber es ändert nichts an der Art, dass die Aufgaben von zu vielen Parametern abhängen. Und wenn ich möchte, dass die Parameterkette besser aussieht, kann ich für jeden Parameter eine neue Zeile verwenden:
https://softwareengineering.stackexchange.com/a/331680/248528
Meine Frage ist also, ob "zu viele Parameter" ein visuelles Problem (schwer zu lesende lange einzelne Codezeile) oder ein logisches Problem sind (die Art der Aufgabe hängt von zu vielen Parametern ab und muss aufgeschlüsselt werden). Wenn es sich eher um ein visuelles Problem handelt, löst eine neue Zeile für jeden Parameter das Problem?
quelle
Antworten:
Es ist in erster Linie ein logisches Problem (das häufig auch mit visuellen Problemen einhergeht). Die falsche Lösung besteht darin, nur zu versuchen, das visuelle Problem durch zu verbessern
Das Einkapseln von Parametern in ein Objekt bedeutet nicht, fünf Parameter in einen beliebigen Container mit einem bedeutungslosen Namen wie zu setzen
ObjectParam
. Stattdessen sollte das Einkapseln einer Gruppe von Parametern in ein Objekt eine neue Abstraktion erstellen (oder eine vorhandene wiederverwenden). MögenEinkapseln von drei Parametern "X, Y, Z" in eine Parameterposition vom Typ
Point3D
oderEinkapselung der Parameter "startDate, endDate" in ein Objekt
DateInterval
oderEinkapseln von Parametern
documentTitle, documentText, author
in ein ObjektDocument
, das diese Parameter zusammenfasstWenn die betreffende Methode viele nicht verwandte Parameter enthält, können Sie keinen guten Gruppierungsnamen finden, dann hat sie wahrscheinlich zu viele Parameter und zu viele Verantwortlichkeiten.
quelle
Eine Methode, die viele Parameter verwendet, ist im Wesentlichen ein Schritt in die entgegengesetzte Richtung zur Konvention gegenüber dem Konfigurationsansatz , bei dem es darum geht, solche Aufrufe zu vereinfachen, ohne die Fähigkeit zu verlieren, Werte nach Bedarf durch die Verwendung sinnvoller Standardeinstellungen zu ändern .
Mit anderen Worten, Sie möchten natürlich nicht an Flexibilität verlieren, müssen aber mit ziemlicher Sicherheit nicht jeden einzelnen Parameter dynamisch übergeben. Viele Parameter werden wahrscheinlich fest / statisch sein. Nehmen Sie als Beispiel ein Zip-Programm. Ja, vielleicht möchten Sie den Komprimierungsalgorithmus, die Komprimierungsstufe, die Anzahl der CPU-Kerne, die für die Aufgabe reserviert werden sollen, usw. ändern. Der Punkt ist, dass niemand jedes Mal, wenn Sie eine Zip-Datei erstellen müssen, alle diese Parameter angeben möchte, um einen Anruf effektiv zu reduzieren, indem das Nötigste bereitgestellt wird (dh der Name der Zip-Zieldatei, Dateien, die der Zip-Datei hinzugefügt werden sollen).
Die Gründe, warum Sie die Konvention anstelle des Konfigurationsansatzes verwenden würden, sind die gleichen, warum Sie keine Methoden haben sollten, die viele Parameter erfordern. Kurz gesagt, Einfachheit ist gut.
quelle