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

Что такое рефакторинг и зачем он нам?

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

Следующие строки покажут вам несколько примеров рефакторинга устаревшего кода и его улучшения.

Никогда не реорганизуйте производственный код, в котором нет модульных тестов.

Мой первый совет - никогда не начинать рефакторинг устаревшего кода, в котором нет надлежащих модульных тестов. Думаю, причина очевидна: у вас останутся неработающие функции, которые будет трудно исправить, потому что вы не сможете понять, что сломано. Поэтому, если вам нужно его реорганизовать, сначала начните с тестирования. Убедитесь, что часть, которую вы собираетесь реорганизовать, покрывается тестами. Отметьте Анализ покрытия кода PHPUnit.

Начните рефакторинг с самой глубокой точки вашего кода

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

Как вы можете видеть в этом методе, есть три уровня, отмеченные красным. Самой глубокой точкой должен быть вложенный оператор if / else внутри первого условия if. Обычно самое главное - сосредоточиться на единственной логике, которая упрощает рефакторинг.

Сделайте свои методы короче, разделив их на более мелкие методы или файлы конфигурации / таблицу БД.

Возможно, в этом случае мы можем извлечь его в частный метод следующим образом:

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

Всегда используйте {} в операторах if

Большинство языков программирования поддерживают однострочные операторы if, и некоторые разработчики используют их, потому что они просты, однако они не читаются и легко могут вызвать проблемы, поскольку только одна пустая строка может нарушить условие и привести к сбою. Посмотрите разницу между двумя примерами:

Не используйте магические числа или магические строки:

В следующем примере вы заметили, что если комнат больше 250, возвращается сообщение об ошибке. В этом случае 250 считается магическим числом. Если вы не являетесь разработчиком, написавшим его, будет сложно понять, что он из себя представляет.

Чтобы провести рефакторинг этого метода, мы можем вычислить, что 250 - это максимальное количество комнат. Поэтому вместо жесткого кодирования мы можем извлечь его в переменную $ maxAvailableRooms. Теперь это более понятно другим разработчикам.

Не используйте else-операторы, если вам не нужно:

В той же функции availablerooms () вы заметили оператор if, в котором мы можем легко избавиться от части else, и логика останется той же.

Используйте осмысленные имена для ваших методов, переменных и тестов

В следующем примере вы можете видеть, что есть два метода из системы управления отелем, которые называются index () и room_m (). Для меня я не могу определить, каковы их цели. Думаю, было бы легче понять, если бы их имена были описательными.

Используйте максимум возможностей вашего языка программирования

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

В заключение я хотел бы дать еще несколько советов по улучшению кодирования:

  • Используйте новый массив form [] вместо старого array ().
  • Используйте оператор === вместо ==, если не важно не проверять dataType.
  • Всегда рекомендуется давать общедоступным методам короткие описательные имена. Частные методы могут иметь более длинные имена, поскольку их область действия ограничена.
  • Используйте только общие имена с методами, которые реализуют интерфейсы, например add (), и используйте описательные имена для методов отдельных классов addUser () или addDocument ().
  • Удалите неиспользуемые методы из ваших классов.
  • Используйте префикс is / has с функциями, возвращающими логическое значение ex: isAdmin ($ user), hasPermission ($ user).
  • Всегда используйте модификаторы доступа в методах и свойствах класса.
  • Будьте осторожны с загрязнением интерфейса: используйте только те методы, которые пользователи могут использовать публично.
  • Организуйте методы классов, где публичные методы находятся на вершине.
  • Всегда применяйте концепцию единой ответственности к своим классам.


Еще прочесть:
- Архитектура программного обеспечения - разница между архитектурой и дизайном
- Архитектура программного обеспечения: спроектируйте свое приложение с помощью AWS
- Пишите чисто кода и избавьтесь от запаха кода с помощью реальных примеров