Angenommen, ich habe ein benutzerdefiniertes Objekt, Student :
public class Student{
public int _id;
public String name;
public int age;
public float score;
}
Und eine Klasse, Window , mit der Informationen eines Schülers angezeigt werden :
public class Window{
public void showInfo(Student student);
}
Es sieht ganz normal aus, aber ich fand, dass Window nicht ganz einfach einzeln zu testen ist, da es ein echtes Student- Objekt benötigt, um die Funktion aufzurufen. Deshalb versuche ich, showInfo so zu ändern, dass es ein Student- Objekt nicht direkt akzeptiert :
public void showInfo(int _id, String name, int age, float score);
Damit es einfacher ist, Window einzeln zu testen :
showInfo(123, "abc", 45, 6.7);
Aber ich fand die geänderte Version hat noch andere Probleme:
Modify Student (z. B. Hinzufügen neuer Eigenschaften) erfordert das Ändern der Methodensignatur von showInfo
Wenn Student viele Eigenschaften hätte, wäre die Methodensignatur von Student sehr lang.
Wenn Sie also benutzerdefinierte Objekte als Parameter verwenden oder jede Eigenschaft in Objekten als Parameter akzeptieren, welche ist besser zu warten?
int
Parameter. Auf der Anrufseite gibt es keine Bestätigung, dass Sie sie tatsächlich in der richtigen Reihenfolge übergeben. Was ist, wenn Sie id
und age
, oder firstName
und tauschen lastName
? Sie führen eine potenzielle Fehlerquelle ein, die sehr schwer zu erkennen ist, bis sie in Ihrem Gesicht explodiert, und Sie fügen sie an jedem Anrufstandort hinzu .
showForm(bool, bool, bool, bool, int)
Methode - ich liebe diese ...
showInfo
erfordert einen echten String, einen echten Float und zwei echte Ints. Wie ist esString
besser , ein reales Objekt bereitzustellen als ein realesStudent
Objekt?