Как вы решаете, какие части кода следует консолидировать/рефакторить в следующий раз?

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

  •  09-09-2019
  •  | 
  •  

Вопрос

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

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

Решение

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

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

Одна важная эвристика, которую я использую, — это Принцип единой ответственности.Это делает занятия очень сплоченными.В некоторых случаях я использую размер класса в строках кода в качестве эвристики для более тщательного определения того, имеет ли класс несколько обязанностей.В моем текущий проект Я заметил, что при написании Java большинство классов будут иметь длину менее 100 строк, и часто, когда размер приближается к 200 строкам, класс делает много несвязанных вещей, и его можно разделить, чтобы получить больше целенаправленные сплоченные занятия.

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

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

Обычно я рефакторю только «по требованию», т.е.если я вижу конкретную, немедленную проблему с кодом.

Часто, когда мне нужно реализовать новую функцию или исправить ошибку, я обнаруживаю, что текущая структура кода затрудняет это, например:

  • слишком много мест, которые нужно изменить из-за копирования и вставки
  • неподходящие структуры данных
  • вещи жестко запрограммированы, которые необходимо изменить
  • методы/классы слишком велики для понимания

Потом проведу рефакторинг.

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

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

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

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

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

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