Pull to refresh

Guard классы — использовать или нет?

Reading time 1 min
Views 14K

На днях мне довелось делать довольно крупные изменения в одном C# проекте — удаление сторонней сборки. Самое "замечательное", что львиную долю времени я потратил на изменение мест, где использовались helper'ы из этой сборки (так сказать бонус к основной функциональности).


Helper'ы такого вида:


Guard.ArgumentNotNull(myobject, "myobject");

Такие классы встречаются очень часто, они могут оформляться в common libraries и кочевать из проекта в проект. Но нужны ли они? Распространенное мнение, что подобные guard'ы уменьшают количество строк кода и увеличивают ясность, но, как по мне, это очень субъективное мнение. Вот пример:


class Manager(IEventProvider eventProvider, IDataSource dataSource)
{
    Guard.ArgumentNotNull(eventProvider, "eventProvider");
    Guard.ArgumentNotNull(dataSource, "dataSource");

    this.eventProvider = eventProvider;    
    this.dataSource = dataSource;    
}

class Manager(IEventProvider eventProvider, IDataSource dataSource)
{
    if (eventProvider == null)
        throw new ArgumentNullException("eventProvider");

    if (dataSource == null)
        throw new ArgumentNullException("dataSource");

    this.eventProvider = eventProvider;    
    this.dataSource = dataSource;    
}

Да количество строк кода больше, но пострадала ли ясность? Нет.


Еще одно мнение, что при необходимости выполнить проверки для большого количества зависимостей, конструкция if (...) throw превращает код в кашу. Согласен, но это симптомы проблем в дизайне, а не конструкции if (...) throw.


Интересное рассуждение на эту тему есть в блоге Марка Симана.


А что вы думаете?


P.S. Есть еще code contracts, которые в самом простом варианте могут использоваться для подобного рода проверок.

Only registered users can participate in poll. Log in, please.
Guard methods or if (...) throw new
10.38% Использую свой Guard 27
5.77% Использую Guard из сторонней библиотеки 15
6.15% Использую Code Contracts 16
59.62% Использую if (...) throw 155
18.08% Не проверяю входные параметры 47
260 users voted. 72 users abstained.
Tags:
Hubs:
+11
Comments 93
Comments Comments 93

Articles