Подтвердить что ты не робот

Существует ли стандартный способ организации методов внутри класса?

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

4b9b3361

Ответ 1

StyleCop выполняет некоторые действия здесь:

Внутри класса, структуры или интерфейса элементы должны располагаться в следующем порядке:

  • Поля
  • Конструкторы
  • Финализаторы (деструкторы)
  • Делегаты
  • События
  • Перечисления
  • Интерфейсы
  • Свойства
  • Индексаторы
  • Методы
  • Структуры
  • Классы

Кроме того, элементы упорядочиваются путем доступа:

  • public
  • internal
  • protected internal
  • protected
  • private

Как и несколько других правил:

  • Контейнеры должны появляться перед полями Элементы
  • static должны появляться перед элементами экземпляра.

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

Ответ 2

Что бы вы ни делали, поместите его в свои стандарты и будьте последовательны. Для заказа наших методов мы используем пользовательскую конфигурацию Regionerate. Все в команде используют ту же конфигурацию.

EDIT: теперь мы используем ReSharper Очистка кода с пользовательским макетом типа.

Ответ 3

Я использую NArrange, который выполняет большинство вещей, которые я хочу: групповые поля, методы... в алфавитном порядке и модификаторы доступа. Он также применяет некоторые правила стиля Cop (например, порядок типов элементов, расположение используемых операторов). NArrange настраивается в некоторой степени, вам не нужно жить с настройкой по умолчанию, если вам это не нравится.

Обновление: Теперь я использую Resharper, так как NArrange работает неправильно с новым синтаксисом С#.

Ответ 4

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

При необходимости я группирую их по функциональности. Я имею в виду: я ставил связанные методы для этого.

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

Ответ 5

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

Ответ 6

Поскольку у Visual Studio есть инструменты для быстрой навигации по методам по имени, я предпочитаю поместить частные переменные-члены и конструкторы близко к вершине и групповым методам по функциональности (т.е. вспомогательные методы близки к методам, которые их называют). Я также группирую свойства вместе. Если класс становится существенным, я использую директивы #region для отображения организации.

Ответ 7

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

Хотя книга специально посвящена Java, "Дядя Боб" . Чистый код содержит некоторые отличные общие принципы для удобочитаемости в классах OO. В частности, он использует метафору хорошо написанной газетной статьи с заголовком наверху, за которым следует абзац синопсиса, а затем увеличиваются детали, как вы читаете далее статью. Стремясь к подобной структуре сверху вниз в ваших классах, она делает задачу чтения или понимания вашего кода намного проще для других.

Ответ 8

Я группирую свои методы с помощью их модификатора доступа
и в следующей последовательности:

  • public
  • внутренний
  • защищенный внутренний
  • protected
  • частным

Ответ 9

Нет, большинство людей просто группируют методы по логическому подобию или вообще не работают. Это не имеет значения - классы не должны становиться слишком большими, и с достойной IDE вы можете просто ctrl + click, чтобы перейти к любому определению метода в любом случае.

Ответ 10

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

Затем по соотношению и только затем сортировка в алфавитном порядке.

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

Ответ 11

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

Ответ 12

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