Ответ 1
Моя конвенция не должна их использовать.
Если вы обнаружите, что ваш класс становится слишком большим, так что вам нужно скрыть огромные части его через регионы, я предлагаю, чтобы ваш класс был слишком сложным и его нужно разбить.
Я очень ценю возможность определять регионы в вашем коде, поскольку это улучшает читаемость безумно.
В любом случае, я хотел бы, чтобы все использовали одно и то же соглашение во всех классах (с предопределенным порядком всех регионов), например:
Есть ли у вас предложение о том, как может выглядеть это разделение (какие регионы имеют смысл и какие имена они должны иметь) и в каком порядке они должны быть определены?
Моя конвенция не должна их использовать.
Если вы обнаружите, что ваш класс становится слишком большим, так что вам нужно скрыть огромные части его через регионы, я предлагаю, чтобы ваш класс был слишком сложным и его нужно разбить.
Кто-то однажды сказал, что имеет соглашение, подобное приведенному выше:
- Частные поля
- Конструкторы
- Свойства класса
- Обработчики событий
- и т.д...
похож на установку таблицы, в которой все пластины собраны вместе, все ложки вместе, все ножи вместе, и все вилки вместе.
Возьмем проблему #region
, чтобы связать связанные методы, определения событий и свойства вместе в одном регионе. Тем не менее, необходимость сделать это вообще будет означать запах кода (либо ваш класс слишком велик, либо слишком много вещей), но это хороший первый шаг в реорганизации его в лучший класс.
Всякий раз, когда я вижу регионы, я думаю, что код генерируется или нуждается в повторной факторизации.
Избегайте их использования, и когда вы чувствуете необходимость в них, пересмотрите то, что вы делаете, и попытайтесь разбить свой класс на более мелкие. В конечном итоге это поможет с читабельностью приложения больше, чем с использованием регионов.
Лично я бы не рекомендовал делать области кода частью вашего соглашения о коде. Основная причина заключается в том, что области скрывают код, что может привести к следующим проблемам:
Если вы заинтересованы в соблюдении соглашения о стиле кодирования в своей команде, посмотрите Microsoft StyleCop, Обратите внимание, что инструмент в настоящее время работает только для С#.
#region Lotsa boring code and lookup tables
Я использую его для сохранения экранной недвижимости, ничего другого:)
Я использую следующие области:
Private Member Variables
Constructor
Public Properties
Private Methods
Public Methods
Events
Причина заключается в лучшей организации кода.
Я работаю с файлами, которые могут иметь более 2000 строк кода, и очень сложно поддерживать код без регионов.
Я думаю, что в регионах нет необходимости. Они не разборчивы. Если вам нужно (подумайте, вы действительно нуждаетесь?) Код суммы в своем классе, вы можете использовать "неполный" класс для разделения логических единиц класса.
Подумайте о них как о другой форме комментариев: дополнительная информация, смешанная с вашим кодом, которая не имеет никакой официальной проверки. Следовательно, он, скорее всего, будет устаревать с кодом.
Поэтому НИКОГДА не дублируйте в комментариях или региональных директивах то, что уже указано в коде.
Добавляйте дополнительную информацию.
В частности, использование регионов для подтверждения того факта, что некоторые члены являются свойствами, событиями и т.д., совершенно бессмысленно. Самая распространенная проблема заключается в том, что вы создаете регион для "частных методов", а затем редактируете один из них, чтобы сделать его общедоступным. Теперь вам нужно переместить его, а это значит, что в отличие от старой версии простое изменение гораздо труднее распознать.
Вам может быть интересен этот вы говорите "нет" в регионах С#.
Я думаю, что, пока вы согласуетесь с вашим проектом, неважно, какой заказ вы их пишете. Также очень осторожно относитесь к их чрезмерному использованию (отсюда и исходная ссылка!).
Нет ничего хуже, чем найти замкнутую область конструктора, которая скрывает только одну строку кода.
Я думаю, что в конце концов это до личного вкуса. Как я уже сказал, последовательность - это ключ!
Я написал свой собственный фрагмент кода региона для 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.