Рефакторинг в Python

Рефакторинг в Python

Алексей Кузьмин (технический руководитель, Domclick) @ Moscow Python Meetup 71
"Рефакторинг — это то, что надо периодически проводить с любым проектом, иначе он станет неподдерживаемым. Python дает нам возможность превратить сложный, большой и уродливый репозиторий в образец краткости и лаконичности, который будет понятен с первого взгляда и легко сопровождаем.
В докладе я постараюсь дать свои советы и рекомендации по тому, как проводить подобный рефакторинг. В частности я расскажу вам о:
⁃ Быстрых победах — что в целом надо сделать, что повысить качество создаваемого кода
⁃ Паттернах и антипаттернах — как хорошо делать хорошо, и как плохо делать плохо
⁃ Ну и немного поговорим о философских вопросах и подходах к разработке☺
Доклад будет полезен начинающим и миддл-разработчикам, особенно в преддверии новогодних праздников — когда можно будет неспеша применить полученные знания на практике".
Видео: http://www.moscowpython.ru/meetup/71/python-refactoring/

53b0434aded1fb944ec3037c382158c1?s=128

Moscow Python Meetup

December 26, 2019
Tweet

Transcript

  1. РЕФАКТОРИНГ В PYTHON АЛЕКСЕЙ КУЗЬМИН

  2. ОБО МНЕ АЛЕКСЕЙ КУЗЬМИН • ДИРЕКТОР РАЗРАБОТКИ В ДОМКЛИК •

    РУКОВОЖУ НАПРАВЛЕНИЕМ МАШИННОГО ОБУЧЕНИИ И РАБОТЫ С ДАННЫМИ • В СВОБОДНОЕ ВРЕМЯ ПРЕПОДАЮ =) • @ALEX_KUZMIN • ALEKSEJ.KYZMIN@GMAIL.COM
  3. ДОМКЛИК • ЕДИНЫЙ ПОРТАЛ НЕДВИЖИМОСТИ И ИПОТЕЧНОГО КРЕДИТОВАНИЯ СБЕРБАНКА •

    БЫСТРАЯ, КОМФОРТНАЯ И БЕЗОПАСНАЯ АЛЬТЕРНАТИВА ТРАДИЦИОННОЙ ИПОТЕЧНОЙ СДЕЛКЕ • НАДЕЖНЫЕ И ПОЛЕЗНЫЕ СЕРВИСЫ • ДРУЖНАЯ И ВЕСЕЛАЯ КОМАНДА • HTTPS://TEAM.DOMCLICK.RU
  4. О ЧЕМ ПОГОВОРИМ • ЧТО ТАКОЕ РЕФАКТОРИНГ И КОДА ЕГО

    СТОИТ ПРОВОДИТЬ • КАК ПОВЫСИТЬ КАЧЕСТВО КОДА БЫСТРО ПРИ ПОМОЩИ ИНСТРУМЕНТОВ • АНТИПАТТЕРНЫ В КОДЕ • ПАТТЕРНЫ, ПОМОГАЮЩИЕ С РЕФАКТОРИНГОМ • ОБЩИЕ ПРИНЦИПЫ
  5. РЕФАКТОРИНГ • РЕФАКТОРИНГ — ЭТО КОНТРОЛИРУЕМЫЙ ПРОЦЕСС УЛУЧШЕНИЯ КОДА, БЕЗ

    НАПИСАНИЯ НОВОЙ ФУНКЦИОНАЛЬНОСТИ. • РЕЗУЛЬТАТ РЕФАКТОРИНГА — ЭТО ЧИСТЫЙ КОД И ПРОСТОЙ ДИЗАЙН.
  6. КОГДА СТОИТ ПРОВОДИТЬ РЕФАКТОРИНГ?

  7. ПРЯМО СЕЙЧАС

  8. ПРЯМО СЕЙЧАС ЕСЛИ У ТЕБЯ НЕ HELLO, WORLD ☺

  9. ИНСТРУМЕНТЫ УДОБНО, ОДИН РАЗ НАСТРОИЛ – РАБОТАЮТ ВСЕГДА, БЕСПРИСТРАСТНЫ И

    ВОСПРОИЗВОДИМЫ
  10. ЛИНТЕРЫ • ПРОВЕРЯЮТ КОД НА СЛЕДОВАНИЕ ПРАВИЛАМ • ПРОСТЫЕ -

    ТОЛЬКО СТИЛЬ • СЛОЖНЫЕ – ЕЩЕ И СЕМАНТИКУ
  11. PYLINT • УТИЛИТА ДЛЯ PYTHONA • ПРОВЕРЯЕТ: • СТАНДАРТЫ (ДЛИНА

    СТРОК, НАЗВАНИЯ ПЕРЕМЕННЫХ, ИСПОЛЬЗОВАНИЕ МОДУЛЕЙ) • ОШИБКИ (ИМПОРТИРОВАНЫ ЛИ НУЖНЫЕ МОДУЛИ, ИСПОЛЬЗОВАНИЕ ДО ОБЪЯВЛЕНИЯ И ТП) • ПОИСК ДУБЛИРОВАНИЯ КОДА • ВСТРАИВАЕТСЯ В IDE (VSCODE, PYCHARM И ТД) • ПОДДЕРЖКА CI/CD
  12. АВТОФОРМАТЕРЫ • ПРИВОДЯТ КОД К ЕДИНОМУ СТИЛЮ • ЛЕГКО ИСПОЛЬЗОВАТЬ

    (ОБЫЧНО ВСТРАИВАЮТСЯ В IDE И РАБОТАЮТ В ФОНЕ)
  13. АВТОФОРМАТТЕРЫ • BLACK • AUTOPEP8 • YAPF • НЕКОТОРЫЕ ГОВОРЯТ,

    ЧТО BLACK БЫСТРЕЕ (HTTPS://MEDIUM.COM/@BOXED/A-QUICK- PERFORMANCE-COMPARISON-OF-PYTHON-CODE-FORMATTERS-3A89478DA8B8) • В ЦЕЛОМ, ГЛАВНОЕ, ЧТОБЫ БЫЛ
  14. ИНСТРУМЕНТЫ: ИТОГИ • ПРИВОДЯТ ВСЕ К ЕДИНООБРАЗНОМУ СТИЛЮ – МЕНЬШЕ

    ОБСУЖДЕНИЙ НА РЕВЬЮ • ПОЗВОЛЯЮТ БОЛЬШЕ ДУМАТЬ О ПРОБЛЕМАХ, А НЕ О ПЕРЕНОСАХ СТРОК • БЫСТРЫЙ ТОЛЧОК В КАЧЕСТВЕ КОДА • ИМЕННО «ТОЛЧОК», ПОТОМУ ЧТО КОРНЕВЫЕ ПРОБЛЕМЫ ОСТАЮТСЯ НЕ РЕШЕННЫМИ
  15. АНТИПАТТЕРНЫ

  16. АНТИПАТТЕРНЫ • РАСПРОСТРАНЕННЫЙ ПОДХОД К РЕШЕНИЮ ЗАДАЧИ • НЕ ЭФФЕКТИВНЫЙ

    • НЕ МАСШТАБИРУЕМЫЙ • ПЛОХО ПОДДЕРЖИВАЕМЫЙ
  17. ОБЩИЕ

  18. COPY AND PASTE PROGRAMMING • ФУНКЦИОНАЛЬНАЯ ДЕКОМПОЗИЦИЯ • НЕ БОЙТЕСЬ

    МЕТОДОВ, КОТОРЫЕ ВЫЗЫВАЮТСЯ РОВНО В ОДНОМ МЕСТЕ
  19. CRYPTIC CODE • ИСПОЛЬЗОВАНИЕ АББРЕВИАТУР ВМЕСТО МНЕМОНИЧНЫХ ИМЁН

  20. БЕЗДУМНОЕ КОММЕНТИРОВАНИЕ # КОЛИЧЕСТВО ОБЪЕКТОВ OBJECTS_COUNT = 5 • ПРИ

    ЭТОМ ПОДУМАЙТЕ, КАК ВСЁ-ТАКИ ПРОКОММЕНТИРОВАТЬ • КОММЕНТИРУЕШЬ – ДУМАЙ!
  21. REINVENTING THE WHEEL • REINVENTING THE SQUARE WHEEL

  22. PROGRAMMING BY PERMUTATION • # НЕ ЗНАЮ, КАК ЭТО РАБОТАЕТ.

    НЕ УДАЛЯТЬ И НЕ МЕНЯТЬ!!! • РАЗБЕРИТЕСЬ • ПЕРЕПИШИТЕ, НАКОНЕЦ!
  23. BLIND FAITH • ФАКТОР НЕВЕРОЯТНОСТИ

  24. АРХИТЕКТУРНЫЕ АНТИПАТТЕРНЫ

  25. BIG BALL OF MUD • СПАГЕТТИ КОД • ГРАФ ЗАВИСИМОСТИ

    МЕЖДУ КЛАССАМИ ПОЧТИ ПОЛНЫЙ
  26. GOLDEN HAMMER • ЛУЧШИЙ ПАТТЕРН – OBSERVER! • CARGO CULT

    PROGRAMMING – ИСПОЛЬЗОВАНИЕ ПАТТЕРНОВ БЕЗ НЕОБХОДИМОСТИ И ПОНИМАНИЯ
  27. HARD CODE • MAGIC NUMBERS • C:\DOCUMENTS AND SETTINGS\MILASHKA\MYPROGRAM\DATA.TXT

  28. SOFT CODE • ВСЁ КАСТОМИЗИРУЕМО

  29. GOD OBJECT • РАЗДУВАНИЕ ИНТЕРФЕЙСА • ИЗБЫТОЧНАЯ СЛОЖНОСТЬ

  30. ПАТТЕРНЫ

  31. ЧТО ДЕЛАЕМ • ОТДЕЛЯЕМ СТАРЫЙ КОД: • ИНТЕРФЕЙС • ФАСАД

    • НОВЫЙ КОД СРАЗУ ДЕЛАЕМ ХОРОШО
  32. ИНТЕРФЕЙС • ИЩЕМ СТАНДАРТНЫЙ ИЛИ ЧАСТЫЕ СЦЕНАРИИ ИСПОЛЬЗОВАНИЯ КОДА •

    ИЩЕМ ОСНОВНЫЕ «СТРОИТЕЛЬНЫЕ БЛОКИ» • СОЗДАЕМ ИНТЕРФЕЙС • ПОДДЕРЖИВАЕМ EDGE-CASES ЗА СЧЁТ СПЕЦИАЛИЗАЦИИ
  33. ФАСАД • «НЕЛЬЗЯ ПРОСТО ТАК ВЗЯТЬ И СДЕЛАТЬ ХОРОШИЙ КОД»

    • ОБОРАЧИВАЕМ СУЩЕСТВУЮЩИЙ КОД В ФАСАД, СКРЫВАЯ РЕАЛИЗАЦИЮ ОТ ИСПОЛЬЗОВАНИЯ • УПРАВЛЯЕМ СЛОЖНОСТЬЮ, ЗА СЧЕТ ПРЕДОСТАВЛЕНИЯ ПРОСТОГО ИНТЕРФЕЙСА К СЛОЖНОЙ ПОДСИСТЕМЕ
  34. АНТИПАТТЕРНЫ И ПАТТЕРНЫ - ИТОГИ • КОД НИКОГДА НЕ БЫВАЕТ

    ХОРОШИМ, ОСОБЕННО ЕСЛИ КОДОВАЯ БАЗА АКТИВНО РАСТЕТ • НЕЛЬЗЯ ПРОСТО ВЗЯТЬ ВСЕ И ПЕРЕПИСАТЬ • ПОСТЕПЕННОЕ УЛУЧШЕНИЕ
  35. ВМЕСТО ЗАКЛЮЧЕНИЯ

  36. НАПИСАНИЕ КОДА • КОД БОЛЬШЕ ЧИТАЮТ, ЧЕМ ПИШУТ • ЛУЧШИЙ

    КОД МОЖЕТ БЫТЬ ЛЕГКО ПЕРЕПИСАН БЕЗ УСИЛИЙ • БЫСТРЫЕ ПРАВКИ НЕ НЕСУТ СТАБИЛЬНОСТИ • «ОН РАБОТАЛ ДО СИХ ПОР, ПУСТЬ РАБОТАЕТ И ДАЛЬШЕ» • ПОСТЕПЕННЫЕ ИЗМЕНЕНИЯ
  37. DRY, KISS, YAGNI • DRY - DON’T REPEAT YOURSELF •

    KISS - KEEP IT STUPID SIMPLE • YAGNI - YOU AREN’T GONNA NEED IT
  38. SOLID • ПЯТЬ ОСНОВНЫХ ПРИНЦИПОВ ОБЪЕКТНО- ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ И ПРОЕКТИРОВАНИЯ.

  39. СПАСИБО ЗА ВНИМАНИЕ

  40. ВОПРОСЫ?