Страницы

Поиск по вопросам

понедельник, 23 декабря 2019 г.

Стоит ли обрабатывать исключения во вложенных методах, если в вызывающем методе есть try catch?

#c_sharp


Есть большой модуль, состоящий из множества методов. У модуля есть точка входа -
начальный метод, который вызывает многие другие методы, те в свою очередь вызывают
что-то еще и так далее. Весь код в начальном методе обернут в try catch. Нужно ли во
вложенных методах делать какие-либо проверки, если все равно начальный метод отловит
ошибку. Никакой особенной обработки всех возможных ошибок не требуется делать. В try
catch просто логирует ее в базу. Просто дико бесит в каком-то из вложенных методов
делать что-то в стиле:

if (City == null || City.House == null || City.House.Premise == null)
    throw new NullRefenceException("Какой-то текст для админа")

DoSomething(City.House.Premise.Subscriber)


либо возвращать из этого метода null, а в вызывающем методе проверить значение на
null и там выкинуть исключение.
Я знаю, что есть оператор "?.", но использовать фишки нового шарпа в нашем проекте
нельзя. Поэтому и созрел вопрос: надо ли постоянно делать какие-то проверки, если в
начальном методе есть try catch, который отловит все исключения и там в одном единственном
будет код, логирующий эту ошибку в базу. Как правильно писать? Дико надоело на каждый
чих проверять что-то на null.
    


Ответы

Ответ 1



Есть гайдлайны с общими рекомендациями, когда бросать исключение, а когда нет. В общих словах, если метод может отработать свою логику - ок, если не может - должен бросить исключение. Также если метод может быть вызван только из вашего кода - то параметры должны быть уже проверены и второй раз их проверять уже не надо. Если параметры могут придти извне (из стороннего кода/файла/методов, которые потребитель может перегрузить/ публичных методов публичных классов/ откуда то ещё что вы не контролируете), то их надо проверять.

Комментариев нет:

Отправить комментарий