Ich habe oft Aufrufhierarchien, in denen alle Methoden die gleichen Parameter benötigen. Wenn ich sie nicht auf Instanzebene (Mitglied der Klasse) setzen möchte, frage ich mich immer, ob es sinnvoll ist, die Gültigkeit in jeder Methode zu überprüfen.Wiederholte Parameterprüfungen in Funktionen
Zum Beispiel:
public void MethodA(object o){
if(null == o){
throw new ArgumentNullException("o");
}
// Do some thing unrelated to o
MethodB(o);
// Do some thing unrelated to o
}
public void MethodB(object o){
if(null == o){
throw new ArgumentNullException("o");
}
// Do something with o
}
Wenn Method
A die Parameter verwendet, dann wird sie klar, ich habe die Gültigkeit dort und auch in MethdoB zu überprüfen. Aber solange MethodeA nichts mehr mit o
tut, als MethodB
zu geben, ist es ratsam, die Gültigkeit auch in MethodA
zu überprüfen.
Der Vorteil der Überprüfung auch in MethodA
kann sein, dass die Ausnahme wirft die Methode, die der Angerufene aufgerufen hat, das ist schön, aber ist es notwendig? Der Call-Stack wird dies auch angeben. Vielleicht seine Bedeutung in der Öffentlichkeit, intern, geschützt, aber nicht in privaten Methoden?
Ich nahm den Null-Check als Beispiel, aber auch Index-Validierungen oder Range-Validierungen fallen in die Selbstfrage, aber ich denke, es gibt Einschränkungen wegen der Gefahr von redundantem Code. Was denken Sie?
UPDATE
Durch die Antwort von AakashM ich gesehen habe, dass ich zu wenig präzise war. MethodA
ruft nicht nur MethodB
, es tut auch andere Dinge, aber nicht im Zusammenhang mit o
. Ich habe ein Beispiel hinzugefügt, um dies zu verdeutlichen. Danke AakashM.
Wo der Eingabewert erzeugt wird - bedeutet dies beim Anrufer? Das Beispiel, das mir beim Schreiben meines Beispiels vorschwebte, war, dass beide Methoden von außerhalb der Klasse zugänglich sind und es legitim ist, eine der beiden aufzurufen (Methode A macht dasselbe und etwas mehr als Methode B) – HCL
Ja. Siehe meine Bearbeitung. – Mau