2016-05-03 4 views
-2

У меня есть вопрос об обработке исключений избыточно в вызывающем методе и вызванном методе. Рассмотрим следующий пример:Рекомендации по обработке исключений в C#

protected void method1(string action) 
{ 
    if (string.IsNullOrWhiteSpace(action)) 
    { 
    throw new ArgumentException("action cannot be null or empty or white space."); 
    } 
    //do something 
} 

public void method2(string name, string action) 
{ 
    if (string.IsNullOrWhiteSpace(name)) 
    { 
    throw new ArgumentException("name cannot be null or empty or whitespace."); 
    } 
    method1(action); 
    //do something 
} 

В приведенном выше примере следует также проверить, чтобы действие было null в методе2? Я чувствую, что, поскольку он обрабатывается в методе 1, мне не нужно иметь дело с ним, так как это может привести к избыточному коду.

Любые предложения будут полезны при изучении передовых методов обработки исключений. Спасибо

+0

Возможно, нужно закрыть как основанную на мнениях, но я бы сказал, что если единственный метод, который ломается, если 'action' равен null, является' method1', тогда _that_ - это место, где должно быть возбуждено исключение. Я бы не стал считать это «неправильным», если «method2» также не проверял это. –

+3

Зависит от того, является ли 'method1'' private' или 'public', поэтому, если' method2' является общедоступным методом ввода, он может служить в качестве метода предварительной проверки для private 'method1'. Nitpick: вы проверяете «IsNullOrWhiteSpace», но сообщение об ошибке «действие не может быть пустым». –

+0

см. Здесь https://msdn.microsoft.com/en-us/library/seyhszts(v=vs.100).aspx также поиск в google вы найдете много ресурсов – Mostafiz

ответ

-2

Я всегда проверяю. Я знаю, как работает код , но я не знаю, что он будет делать в будущем. Код изменится; моей рукой или чужим. Код, который не проверяется, - это бомба замедленного действия, ожидающая взрыва.

+1

Чтобы быть справедливым, он проверяется; вопрос _where_ должен быть проверен. –

+0

Трудно сказать, что такое вариант использования OP, но на поверхности. Похоже, что 'method2' может быть просто другим способом вызова' method1' с другим набором параметров. Если это так, я бы сказал, что ваш ответ неверен, и вы должны стремиться сохранить метод2 свободным от логики, как вы, возможно, можете –

+0

Я еще не согласен. Вы правы, прямо сейчас. Проблема в том, что кто-то еще приходит и что-то меняет. Вам всегда нужно защищать оборону на будущее; потому что вы написали это, и все мы знаем, что человек, который его написал, всегда получает вину, независимо от того, кто действительно ее нарушил. –

2

Если method1 является реализация method2private/internal и вызываться только method2, то вам не нужно поместить аргумент охранника на обоих методов.

+0

Что делать, если метод1 не является частным или внутренним. Похоже, что это может иметь место здесь –

+0

Когда этот ответ был отправлен, оба метода были «частными» в OP, потому что у них не было никаких квалификаторов. –

+0

@MatthewWatson У них также не было типа возврата, так что вы могли бы сказать, что полной подписи метода просто не было. –

Смежные вопросы