Любая идея .NET? #region?

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

В любом случае, я хотел бы, чтобы все использовали одно и то же соглашение во всех классах (с предопределенным порядком всех регионов), например:

  • Частные поля
  • Конструкторы
  • Свойства класса
  • Обработчики событий
  • и т.д...

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

Ответ 1

Моя конвенция не должна их использовать.

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

Ответ 2

Кто-то однажды сказал, что имеет соглашение, подобное приведенному выше:

  • Частные поля
  • Конструкторы
  • Свойства класса
  • Обработчики событий
  • и т.д...

похож на установку таблицы, в которой все пластины собраны вместе, все ложки вместе, все ножи вместе, и все вилки вместе.

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

Ответ 3

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

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

Ответ 4

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

  • Разработчики могут пропустить некоторые важные часть исходного кода
  • Средний количество LOC в том же файле имеет тенденцию к увеличению.

Если вы заинтересованы в соблюдении соглашения о стиле кодирования в своей команде, посмотрите Microsoft StyleCop, Обратите внимание, что инструмент в настоящее время работает только для С#.

Ответ 5

#region Lotsa boring code and lookup tables

Я использую его для сохранения экранной недвижимости, ничего другого:)

Ответ 6

Я использую следующие области:

Private Member Variables
Constructor
Public Properties
Private Methods
Public Methods
Events

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

Ответ 7

Я думаю, что в регионах нет необходимости. Они не разборчивы. Если вам нужно (подумайте, вы действительно нуждаетесь?) Код суммы в своем классе, вы можете использовать "неполный" класс для разделения логических единиц класса.

Ответ 8

Подумайте о них как о другой форме комментариев: дополнительная информация, смешанная с вашим кодом, которая не имеет никакой официальной проверки. Следовательно, он, скорее всего, будет устаревать с кодом.

Поэтому НИКОГДА не дублируйте в комментариях или региональных директивах то, что уже указано в коде.

Добавляйте дополнительную информацию.

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

Ответ 9

Вам может быть интересен этот вы говорите "нет" в регионах С#.

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

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

Я думаю, что в конце концов это до личного вкуса. Как я уже сказал, последовательность - это ключ!

Ответ 10

Я написал свой собственный фрагмент кода региона для VS 2008, который я всегда использую:

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
    <Header>
        <Title>#class region</Title>
        <Shortcut>#classregion</Shortcut>
        <Description>Code snippet for #region in classes</Description>
        <Author>Simon Linder</Author>
        <SnippetTypes>
            <SnippetType>Expansion</SnippetType>
            <SnippetType>SurroundsWith</SnippetType>
        </SnippetTypes>
    </Header>
    <Snippet>
        <Declarations>
            <Literal>
                <ID>name</ID>
                <ToolTip>Region name</ToolTip>
                <Default>MyRegion</Default>
            </Literal>
        </Declarations>
        <Code Language="csharp">
            <![CDATA[#region Variables
                    $selected$ $end$
                #endregion

            #region Construction/Destruction
                    $selected$ $end$
                #endregion

            #region Properties
                    $selected$ $end$
                #endregion

            #region Public Methods 
                    $selected$ $end$
                #endregion

            #region Private/Proteced Methods
                    $selected$ $end$
                #endregion]]>
        </Code>
    </Snippet>
</CodeSnippet>

Как вы можете видеть, я использую регионы для методов Variables, Construction/Destruction, Properties, Public и Private. Я часто добавляю еще один субрегион в частный регион под названием events. Порядок регионов также отлично работает с StyleCop.