Как вы относитесь к свертыванию кода? [закрыто]

Для тех из вас, кто находится в среде Visual Studio, как вы относитесь к переносу кода в #regions? (или если в любой другой IDE есть нечто подобное ...)

8.08.2008 13:38:30
Вы должны знать, когда их держать, знать, когда их сложить - Кенни Роджерс.
Mark Ransom 4.10.2010 17:15:35
24 ОТВЕТА
РЕШЕНИЕ

9 из 10 раз сворачивание кода означает, что вы не смогли использовать принцип SoC, чего бы это ни стоило.
Я более или менее чувствую то же самое в отношении частичных занятий. Если у вас есть фрагмент кода, который вы считаете слишком большим, вам нужно разбить его на управляемые (и повторно используемые) части, а не скрывать или разбивать его.
Он укусит вас в следующий раз, когда кому-то понадобится изменить его, и он не сможет увидеть логику, скрытую в монстре из 250 строк метода.

Всякий раз, когда вы можете вытащить некоторый код из основного класса в класс помощника или фабрики.

foreach (var item in Items)
{
    //.. 100 lines of validation and data logic..
}

не так читабельно, как

foreach (var item in Items)
{
    if (ValidatorClass.Validate(item))
        RepositoryClass.Update(item);
}



Мои $ 0,02 в любом случае.

35
11.08.2008 13:17:40
Я думал, что частичные классы были в основном там, чтобы обеспечить безопасный способ добавления функциональности в сгенерированный код?
Matt Sach 24.01.2011 11:44:40
Это правда. Если вы разрабатываете класс таким образом, что вам нужно разделить его на несколько файлов для удобства чтения, у вас ничего не получится.
Lars Mæhlum 27.01.2011 13:01:51
Я не думаю, что Java не поддерживает частичный класс, такой как dotNet, а затем подумайте, что вам нужно делать со сложным графическим интерфейсом.
Luke 29.07.2011 10:35:16
LongTTH: вам не нужны частичные классы, вы хотите составить несколько классов.
Lars Mæhlum 14.11.2011 14:09:41

Я использую Textmate (только Mac), у которого есть сворачивание кода, и я считаю его действительно полезным для свертывания функций, я знаю, что делает моя функция «getGet», мне не нужно, чтобы она занимала 10 строк такого ценного места на экране.

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

3
8.08.2008 13:40:55

Об этом говорили на Coding Horror .

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

Я использую его , чтобы заказать мои блоки кода в:
Перечисления
Заявления
Конструкторы
Методы
обработчиков событий
Свойства

14
21.10.2018 11:58:15
Если у вас есть 1 свойство, вы все еще заключаете его в блок региона? :(
Jon Tackabury 21.10.2008 20:01:31
Если файл класса легче перемещаться с ним, уверен. Обычно, если это короткий класс, однако регионы не помогут, поэтому я их опускаю.
Pat 13.12.2008 03:38:33
Не очень проницательная статья.
aehlke 7.08.2009 15:29:21

Я лично использую #Regions все время. Я считаю, что это помогает мне отделить такие вещи, как свойства, объявления и т. Д.

Это, вероятно, хороший ответ тоже!

Код ужас

Редактировать: Данг, Пэт избил меня до этого!

1
21.10.2018 12:00:33

Пока я понимаю проблему в том, что Джефф, эт. и др. что с регионами, то, что я не понимаю, это почему сложно нажать CTRL+ M, CTRL+, Lчтобы развернуть все области в файле.

5
21.04.2015 16:00:52

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

0
8.08.2008 13:57:31

Я предпочитаю частичные занятия, а не регионы.

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

3
8.08.2008 14:01:16

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

С учетом сказанного я на заборе про регионы. По большей части я ими не пользуюсь; тем не менее, я работаю с кодом каждый день, который включает регионы - некоторые люди очень тяжело работают с ними (сворачивая частные методы в регион, а затем каждый метод сворачивается в свой собственный регион), а некоторые люди осваивают их (сворачивая перечисления, складывать атрибуты и т. д.). На данный момент я придерживаюсь общего правила: я помещаю код в регионы только в том случае, если (а) данные, скорее всего, останутся статичными или не будут затронуты очень часто (например, перечисления), или (б), если существуют методы, которые реализуются по необходимости из-за реализации подкласса или абстрактного метода, но, опять же, не будут затронуты очень часто.

2
8.08.2008 14:08:10

Иногда вы можете работать в команде, где #regions поощряются или требуются. Если вы похожи на меня и не можете бездельничать со сложенным кодом, вы можете отключить выделение для C #:

  1. Параметры -> Текстовый редактор -> C # -> вкладка «Дополнительно»
  2. Снимите флажок «Входить в режим контура при открытии файлов»
10
11.08.2008 12:34:06

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

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

5
8.08.2008 14:24:50

@ Том

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

3
23.05.2017 12:07:11

У меня действительно нет проблем с использованием #region для организации кода. Лично я обычно настраиваю разные регионы для таких вещей, как свойства, обработчики событий и публичные / приватные методы.

0
8.08.2008 19:30:57

Eclipse делает это в Java (или PHP с плагинами) самостоятельно. Позволяет складывать функции и тому подобное. Мне это нравится. Если я знаю, что делает функция, и я не работаю над ней, мне не нужно смотреть на нее.

0
11.08.2008 13:01:56

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

2
12.08.2008 17:00:35

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

1
12.08.2008 17:06:10

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

Роланд Вейгельт (Roland Weigelt) предлагает отличный набор макросов VS.NET, который можно найти в его записи в блоге, « Лучшая поддержка клавиатуры для #region ... #endregion» . Я использую их в течение многих лет, картируя Ctrl +. свернуть текущий регион и Ctrl ++, чтобы развернуть его. Выясните, что он работает намного лучше, чем стандартная функциональность VS.NET, которая складывает / раскладывает все.

1
12.08.2008 17:22:38

Coding Horror статья фактической заставила меня думать об этом , а также.

Как правило, в больших классах я помещаю область вокруг переменных-членов, констант и свойств, чтобы уменьшить объем текста, который нужно прокручивать, и оставить все остальное за пределами региона. В формах я обычно группирую вещи в «переменные-члены, константы и свойства», функции форм и обработчики событий. Еще раз, это больше, поэтому мне не нужно пролистывать много текста, когда я просто хочу просмотреть некоторые обработчики событий.

0
21.10.2018 12:01:52

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

0
25.08.2008 12:55:19

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

2
25.08.2008 13:14:36
Я не согласен. Никакая дискуссия, которая заставляет людей задуматься о том, почему они что-то делают (возможно, почему они что-то делали в течение долгого времени) и оценивают лучшие способы работы в будущем, ни к чему не приводит.
Mike Hofer 23.12.2008 12:08:35

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

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

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

0
28.08.2008 18:32:08

Сворачивание областей было бы хорошо, если бы мне не приходилось вручную группировать области на основе особенностей моего кода, которые присущи языку. Например, компилятор уже знает, что это конструктор. Модель кода IDE уже знает, что это конструктор. Но если я хочу увидеть представление кода, в котором конструкторы сгруппированы вместе, по какой-то причине я должен повторить тот факт, что эти вещи являются конструкторами, физически разместив их вместе, а затем поместив вокруг них группу. То же самое касается любого другого способа нарезки класса / структуры / интерфейса. Что, если я передумаю и захочу, чтобы общедоступные / защищенные / приватные вещи сначала были разделены на группы, а затем сгруппированы по типу членов?

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

В любом случае, чтобы избежать необходимости использовать регионы для этой цели, я написал бесплатную надстройку Visual Studio 2008 IDE с открытым исходным кодом под названием Ora. Это обеспечивает групповое представление автоматически, что делает гораздо менее необходимым поддерживать физическую группировку или использовать регионы. Вы можете найти это полезным .

2
20.10.2008 08:34:40

Я обычно нахожу, что при работе с кодом, подобным событиям в C #, где есть около 10 строк кода, которые на самом деле являются просто частью объявления события (класс EventArgs, объявление делегата и объявление события), помещая область вокруг них, а затем складывая их пути делает его немного более читабельным.

2
17.11.2008 19:23:11

Я лично ненавижу регионы. Единственный код, который должен быть в регионах, на мой взгляд, это сгенерированный код. Когда я открываю файл, я всегда начинаю с Ctrl + M + O. Это складывается до уровня метода. Когда у вас есть регионы, вы видите только названия регионов.

Перед проверкой я логически группирую методы / поля, чтобы они выглядели нормально после Ctrl + M + O. Если вам нужны регионы, у вас должно быть много строк в вашем классе. Я также считаю, что это очень распространено.

регион ThisLooksLikeWellOrganizedCodeBecauseIUseRegions

// полный мусор, здесь нет структуры

endregion

0
27.01.2012 08:00:40

Перечисления

свойства

.ctors

методы

Обработчики событий

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

Звучит как ужасная идея :)

0
12.02.2013 09:23:15