У меня часто есть иерархии вызовов, в которых все методы нуждаются в одинаковых параметрах Если я не хочу помещать их на уровень экземпляра (член класса), я всегда спрашиваю, имеет ли смысл проверять их правильность в каждом методе.
Например:
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
}
Если Method
A использует параметр, то его очистить, я должен проверить действительность там, а также в MethdoB. Но до тех пор, пока MethodA ничего не делает с o
больше, чем дает MethodB
, рекомендуется проверять правильность также в MethodA
.
Преимущество проверки также в MethodA
может заключаться в том, что исключение вызывает метод, вызываемый вызываемым пользователем, это хорошо, но нужно ли это? В стеке вызовов это также будет указано. Может быть, это имеет смысл в публичных, внутренних, защищенных, но не в частных методах?
Я взял нулевую проверку в качестве примера, но проверки индекса или проверки диапазона попадают в самооценку, однако я думаю, что существуют ограничения из-за опасности избыточного кода. Что ты думаешь?
UPDATE
Благодаря ответу AakashM я понял, что был немного точен. MethodA
не только звонит MethodB
, но и делает другие вещи, но не относится к o
. Я добавил пример, чтобы прояснить это. Спасибо AakashM.