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

StackOverflow https://stackoverflow.com/questions/5916

  •  08-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

В 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 доллара.

Другие советы

Об этом говорилось на Кодирование ужасов.

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

Я использую его, чтобы упорядочить блоки кода:
Перечисления
Декларации
Конструкторы
Методы
Обработчики событий
Характеристики

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

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

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

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

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

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

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

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

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

@Том

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

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

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

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

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

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

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

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

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

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

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

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

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

Наверное, это тоже хороший ответ!

Кодирование ужасов

Редактировать:Черт, Пэт опередил меня в этом!

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

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

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

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

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

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

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

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

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

регион ThisLooksLikeWellOrganizedCodeBecauseIUseRegions

// полный мусор, никакой структуры

крайний регион

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

Характеристики

.кторы

Методы

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

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

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

А Кодирование ужасов Статья действительно заставила меня задуматься об этом.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top