Когда урок слишком длинный? - PullRequest
22 голосов
/ 08 февраля 2010

Когда функция слишком длинная? является подмножеством этого вопроса, я думаю.

Какие есть хорошие показатели для определения того, что класс слишком длинный?

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

Ответы [ 6 ]

63 голосов
/ 08 февраля 2010

Когда у него более одной ответственности.

Позвольте мне процитировать Чистый код Роберта С. Мартина здесь:

Первое правило классов - они должны быть маленькими. Второй Правило классов заключается в том, что они должны быть меньше, чем это. ... С Функции мы измерили размер путем подсчета физических линий. С занятий мы используйте другую меру. Мы считаем обязанности. [Глава 10, стр. 136]

16 голосов
/ 09 февраля 2010

Сложность разветвления класса : Количество других классов, на которые опирается данный класс. Также было показано, что квадрат этого значения указывает, по крайней мере, на уровень обслуживания, необходимый в функциональных программах (на файловой основе).

Цикломатическая сложность : Проверка цикломатической сложности по указанному пределу. Сложность измеряется количеством операторов if, while, do, for,?:, Catch, switch, case и операторов && и || (плюс один) в теле конструктора, метода, статического инициализатора или инициализатора экземпляра. Это мера минимального количества возможных путей через источник и, следовательно, количества необходимых тестов. Обычно 1-4 считается хорошим, 5-7 хорошо, 8-10 - рефакторинг, и 11+ рефакторинг сейчас!

9 голосов
/ 08 февраля 2010

не более 17 строк. Не больше, не меньше. Так что, если до 17 строк возврат каретки сделает свое дело. Если его больше 17, вам нужно начать вызывать другие функции изнутри функции.

Например:

public function myFunction() {
...
line 17: myFunctionPart2();
}

public function myFunctionPart2() {
...
line 17: myFunctionPart3();
}

и т. Д.

Это довольно стандартная практика программирования.

3 голосов
/ 08 февраля 2010

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

2 голосов
/ 08 февраля 2010

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

Я бы не стал считать число строк значимым показателем.

1 голос
/ 08 февраля 2010

Когда вы думаете, что теперь вам стало сложнее управлять этим и застревает.

...