Кому нравится #regions в Visual Studio?

Лично я терпеть не могу теги регионов, но очевидно, что они имеют широкое распространение для организации кода, поэтому я хочу проверить температуру воды, чтобы другие разработчики MS взяли на себя эту идею.

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

Один программист сказал мне, что области кода помогают продвигать стандарты кодирования, давая понять, где другой программист должен вносить свой вклад.

Но, честно говоря, для меня это звучит как куча конского навоза. Если у вас есть стандарт, задача программиста - понять, что это за стандарт... вам не нужно определять его в каждом отдельном файле класса.

И нет ничего более раздражающего, чем схлопывание всего кода при открытии файла. Я знаю, что cntrl + M, L откроет все, но тогда у вас будет отвратительное «определение хеш-области», открывающее и закрывающее строки для чтения.

Они просто раздражают.

Моя самая твердая философия быстрого кодирования заключается в том, что все программисты должны стремиться создавать четкий, лаконичный и связный код. Теги региона просто служат для создания шума и избыточных намерений.

Теги регионов были бы спорными в хорошо продуманном и продуманном классе.

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


person Nicholas    schedule 01.01.2011    source источник
comment
Это разглагольствования в блоге, а не вопрос.   -  person tvanfosson    schedule 01.01.2011
comment
На самом деле, я спрашиваю, что другие люди думают о регионах. Так что да, это вопрос   -  person Nicholas    schedule 01.01.2011
comment
@tvanfosson Я предполагаю, что как только я наберу достаточно очков, я смогу оспорить преждевременное закрытие этого обсуждения. Я не понимаю, почему открытые вопросы без черно-белых ответов должны быть закрыты. Конфронтация и спор также могут быть сформулированы как оппозиция и дискуссия. Часто это дух программирования, и представление аргументов за или против идей, влияющих на нашу повседневную работу, кажется довольно достойным обсуждением.   -  person Nicholas    schedule 01.01.2011
comment
@Nicholas - вы читали FAQ? Вероятно, есть способ задать этот вопрос, который не был бы закрытым, но на самом деле это больше похоже на мнение, ищущее аргумент, чем на вопрос, ищущий ответ. Например, как можно использовать директиву region? или Являются ли региональные директивы запахом кода? -- и оставьте мнение в самом вопросе, хотя вы могли бы дать ответ, содержащий ваши мысли. Тем не менее, я не знаю, могу ли я обещать, что он не будет закрыт, хотя я, вероятно, не проголосовал бы за его закрытие, если бы он действительно не предполагал ответа.   -  person tvanfosson    schedule 01.01.2011
comment
@tvanfosson Хммм... Наверное, я был слишком силен, на мой взгляд. Достаточно справедливо... Я буду иметь это в виду в следующий раз.   -  person Nicholas    schedule 01.01.2011
comment
@Nicholas: Это явно не правильный вопрос. Вы просто хотите выразить свое мнение и не готовы слушать мнения других людей. Кроме того, вы не умеете правильно вести дискуссию, так что нет смысла ее продолжать. Это не место для подобных дебатов, и вам нужно изменить свое отношение, если вы хотите, чтобы это было где угодно.   -  person Guffa    schedule 01.01.2011
comment
@Guffa, ты явно принял мои комментарии слишком близко к сердцу. Я не согласен с вашими рассуждениями и никоим образом не считаю это грубым. Если вы заметили ниже, я на самом деле проголосовал за кого-то, кто не придерживается моего мнения, так что еще раз, я не согласен с вашими рассуждениями. Спасибо за отрицательный голос!   -  person Nicholas    schedule 02.01.2011
comment
@Nicholas: Мне жаль, что ты не понимаешь, когда ведешь себя грубо.   -  person Guffa    schedule 02.01.2011
comment
@Guffa, твоя искренность очень добра!   -  person Nicholas    schedule 02.01.2011
comment
Связано   -  person Robbie Dee    schedule 26.07.2016
comment
@robbiedee красотка!   -  person Nicholas    schedule 28.07.2016


Ответы (6)


StyleCop не любит регионы:

SA1124: не использовать регионы

Причина

Код C# содержит регион.

Описание правила

Нарушение этого правила происходит всякий раз, когда регион помещается в любом месте кода. Во многих редакторах, включая Visual Studio, область по умолчанию отображается свернутой, скрывая код внутри области. Как правило, скрывать код — плохая практика, так как это может привести к неправильным решениям, поскольку код со временем поддерживается.

Как исправить нарушения

Чтобы исправить нарушение этого правила, удалите регион из кода.

Существует некоторое обсуждение того, является ли это разумным правилом.

Похоже, консенсус заключается в том, что некоторым людям нравятся регионы, а некоторым нет — решение остается за отдельными командами. Самое главное — использовать единый стиль во всем проекте.

Одно из мест, где регионы могут быть приемлемыми, — это группировка всех методов, реализующих конкретный интерфейс. Стоит отметить, что Visual Studio автоматически добавляет регион, если вы используете функцию генерации кода для предоставления заглушек методов для реализации интерфейса.

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

функция частичного класса лучше подходит для отделения автоматически созданного кода от кода, созданного вручную. внутри одного класса.

При работе с автоматически сгенерированным исходным кодом в класс можно добавить код без необходимости повторного создания исходного файла. Visual Studio использует этот подход при создании форм Windows Forms, кода оболочки веб-службы и т. д. Вы можете создать код, использующий эти классы, без необходимости изменять файл, созданный Visual Studio.

person Mark Byers    schedule 01.01.2011
comment
Согласованность важна, но не менее важны связность, ясность и удобочитаемость. Если ваш стиль нарушает эти другие достоинства, вы не можете спрятаться за последовательностью. - person Nicholas; 01.01.2011
comment
Я хочу, чтобы больше людей проголосовало за этот ответ - person Nicholas; 01.01.2011

Мне нравятся регионы, и я использую их все время. Я использую их для группировки членов одного типа внутри классов.

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

person Guffa    schedule 01.01.2011
comment
Верно, я слышал этот аргумент раньше, но раскрытие имен из благих намерений все равно должно сделать регионы спорными. Зачем создавать лишний шум в классе, который хорошо построен и понятен. И свернутое поведение по умолчанию сворачивает всю вашу благонамеренную группировку... что раздражает при чтении чужого кода. - person Nicholas; 01.01.2011
comment
@Nicholas: Лучшие имена не заставляют код буквально исчезать. - person Puppy; 01.01.2011
comment
@DeadMG Это может быть правдой, но зачем вам искусственное исчезновение кода? Вам нужно прочитать это, чтобы понять это. Если он существует, я хочу его прочитать, и я не хочу, чтобы эти шумные теги #region мешали мне. - person Nicholas; 01.01.2011
comment
@Nicholas: В большинстве случаев при поддержке кода вам нужно видеть только определенную его часть. Если вам нужно постоянно видеть весь код, значит, он плохо спроектирован. - person Guffa; 01.01.2011
comment
@Guffa Это глупый комментарий. Я, конечно, не сторонник того дизайна, который вы имеете в виду. Я ЕСМЬ говорю, что ваш код должен быть настолько хорошо продуманным и лаконичным, что необходимость в регионах является избыточной и даже бесполезной. Когда вам приходится скрывать части своего класса, чтобы концептуально уместить его в своем мозгу, вы манипулируете слишком большим количеством концепций. Это квинтэссенция плохого дизайна, отсутствия сплоченности и чрезмерной ответственности. Четкие мысли и идеи, выраженные в коде, не нужно скрывать, а детали не нужно полностью понимать при выполнении обслуживания. - person Nicholas; 01.01.2011
comment
@Nicholas: Извините, вы проиграли. Вы не умеете вести гражданскую дискуссию, так что на этом закончим. - person Guffa; 01.01.2011
comment
@Guffa В моих ответах нет ничего невежливого. Вы путаете несогласие с личным выпадом, что является дурным тоном. - person Nicholas; 02.01.2011

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

person Puppy    schedule 01.01.2011
comment
Мне никогда не приходилось реализовывать что-то, что нельзя было бы разбить на более сдержанные фрагменты понятного кода. По моему опыту, использование #region никогда не было хорошей идеей, но я признаю, что определенные типы функций невозможно реализовать модульным способом. - person Nicholas; 01.01.2011

Я использую регионы для организации больших конструкций в классе, т.е. свойство зависимости с обратным вызовом и методами, вызываемыми этим, например. у вас есть DP, который принимает IEnumerable<T>, и вы хотите использовать шаблон слабого события для ответа на INotifyCollectionChanged. Для этого может потребоваться некоторый код, и, поскольку я не буду его трогать после написания кода, я поместил его в регион.

Однако, если вы прибегаете к регионам для структурирования своей логики, это серьезный запах кода, и именно на это указывает правило StyleCop в сообщении Марка.

person Femaref    schedule 01.01.2011
comment
Я все еще с подозрением отношусь к этому использованию, но я очень ценю ваш комментарий о структурировании логики. - person Nicholas; 01.01.2011
comment
Проблема, с которой люди (и StyleCop) сталкиваются с регионами, довольно проста — они могут скрывать недостатки дизайна. Это не совсем так с помещением DP в регион. Полный DP с сопутствующими методами может занять много кода, и, учитывая, что вы обычно не будете работать с этим шаблонным кодом, я не вижу проблемы с его группировкой по региону. - person Femaref; 01.01.2011

пока я программирую, я часто использую регионы, они помогают мне упорядочивать мой код и иметь возможность сосредоточиться только на тех частях, которые мне интересны. Я всегда добавляю комментарии к регионам и о чем они. Но когда я заканчиваю, я всегда удаляю их. Это удобный инструмент, вот и все.

person elasticrash    schedule 01.01.2011
comment
Значит, вы используете их для организации кода во время его создания? Я так понимаю, вы бы никогда не передали код в репозиторий с региональными тегами? - person Nicholas; 01.01.2011
comment
да, я бы никогда не сделал это с региональными тегами, очевидно. потому что я не ожидаю, что другие будут следовать логике моего региона. Но это полезно на личном уровне - person elasticrash; 01.01.2011
comment
Хорошо, я не могу не согласиться с этим. Я не делаю этого лично, потому что мне нравится видеть весь мой код открытым и передо мной. Что касается меня, я хочу стремиться довести сдержанную часть функциональности до приемлемого уровня завершения, и я хотел бы всегда видеть ее полную форму. - person Nicholas; 01.01.2011

IHMO, если у вас есть раздел #region в классе, это означает, что у вас есть два поведения в вашем классе, и поэтому вы должны разделить свой класс на два объекта.

person Baptiste Pernet    schedule 01.01.2011
comment
Но как насчет случая, когда вы создаете регионы для частных переменных, общедоступных методов, конструкторов... и т.д. и т.п. - person Nicholas; 01.01.2011
comment
Это не так просто. У двух объектов есть такие вещи, как, например, отдельные жизни. И не все многоповеденческие классы можно разделить. - person Puppy; 01.01.2011
comment
Что вы имеете в виду, что класс имеет два поведения? Регионы никоим образом не меняют работу кода, они просто средство организации исходного кода. - person Guffa; 01.01.2011