Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

Moscow Python Meetup

December 26, 2019
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

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

    View full-size slide

  2. ОБО МНЕ
    АЛЕКСЕЙ КУЗЬМИН
    • ДИРЕКТОР РАЗРАБОТКИ В
    ДОМКЛИК
    • РУКОВОЖУ НАПРАВЛЕНИЕМ
    МАШИННОГО ОБУЧЕНИИ И
    РАБОТЫ С ДАННЫМИ
    • В СВОБОДНОЕ ВРЕМЯ
    ПРЕПОДАЮ =)
    • @ALEX_KUZMIN
    [email protected]

    View full-size slide

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

    View full-size slide

  4. О ЧЕМ ПОГОВОРИМ
    • ЧТО ТАКОЕ РЕФАКТОРИНГ И КОДА ЕГО СТОИТ ПРОВОДИТЬ
    • КАК ПОВЫСИТЬ КАЧЕСТВО КОДА БЫСТРО ПРИ ПОМОЩИ ИНСТРУМЕНТОВ
    • АНТИПАТТЕРНЫ В КОДЕ
    • ПАТТЕРНЫ, ПОМОГАЮЩИЕ С РЕФАКТОРИНГОМ
    • ОБЩИЕ ПРИНЦИПЫ

    View full-size slide

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

    View full-size slide

  6. КОГДА СТОИТ ПРОВОДИТЬ РЕФАКТОРИНГ?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  10. ЛИНТЕРЫ
    • ПРОВЕРЯЮТ КОД НА СЛЕДОВАНИЕ ПРАВИЛАМ
    • ПРОСТЫЕ - ТОЛЬКО СТИЛЬ
    • СЛОЖНЫЕ – ЕЩЕ И СЕМАНТИКУ

    View full-size slide

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

    View full-size slide

  12. АВТОФОРМАТЕРЫ
    • ПРИВОДЯТ КОД К ЕДИНОМУ СТИЛЮ
    • ЛЕГКО ИСПОЛЬЗОВАТЬ (ОБЫЧНО ВСТРАИВАЮТСЯ В IDE И РАБОТАЮТ В ФОНЕ)

    View full-size slide

  13. АВТОФОРМАТТЕРЫ
    • BLACK
    • AUTOPEP8
    • YAPF
    • НЕКОТОРЫЕ ГОВОРЯТ, ЧТО BLACK БЫСТРЕЕ (HTTPS://MEDIUM.COM/@BOXED/A-QUICK-
    PERFORMANCE-COMPARISON-OF-PYTHON-CODE-FORMATTERS-3A89478DA8B8)
    • В ЦЕЛОМ, ГЛАВНОЕ, ЧТОБЫ БЫЛ

    View full-size slide

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

    View full-size slide

  15. АНТИПАТТЕРНЫ

    View full-size slide

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

    View full-size slide

  17. COPY AND PASTE PROGRAMMING
    • ФУНКЦИОНАЛЬНАЯ ДЕКОМПОЗИЦИЯ
    • НЕ БОЙТЕСЬ МЕТОДОВ, КОТОРЫЕ ВЫЗЫВАЮТСЯ РОВНО В ОДНОМ МЕСТЕ

    View full-size slide

  18. CRYPTIC CODE
    • ИСПОЛЬЗОВАНИЕ АББРЕВИАТУР ВМЕСТО МНЕМОНИЧНЫХ ИМЁН

    View full-size slide

  19. БЕЗДУМНОЕ КОММЕНТИРОВАНИЕ
    # КОЛИЧЕСТВО ОБЪЕКТОВ
    OBJECTS_COUNT = 5
    • ПРИ ЭТОМ ПОДУМАЙТЕ, КАК ВСЁ-ТАКИ ПРОКОММЕНТИРОВАТЬ
    • КОММЕНТИРУЕШЬ – ДУМАЙ!

    View full-size slide

  20. REINVENTING THE WHEEL
    • REINVENTING THE SQUARE WHEEL

    View full-size slide

  21. PROGRAMMING BY PERMUTATION
    • # НЕ ЗНАЮ, КАК ЭТО РАБОТАЕТ. НЕ УДАЛЯТЬ И НЕ МЕНЯТЬ!!!
    • РАЗБЕРИТЕСЬ
    • ПЕРЕПИШИТЕ, НАКОНЕЦ!

    View full-size slide

  22. BLIND FAITH
    • ФАКТОР НЕВЕРОЯТНОСТИ

    View full-size slide

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

    View full-size slide

  24. BIG BALL OF MUD
    • СПАГЕТТИ КОД
    • ГРАФ ЗАВИСИМОСТИ МЕЖДУ КЛАССАМИ ПОЧТИ ПОЛНЫЙ

    View full-size slide

  25. GOLDEN HAMMER
    • ЛУЧШИЙ ПАТТЕРН – OBSERVER!
    • CARGO CULT PROGRAMMING – ИСПОЛЬЗОВАНИЕ ПАТТЕРНОВ БЕЗ НЕОБХОДИМОСТИ И
    ПОНИМАНИЯ

    View full-size slide

  26. HARD CODE
    • MAGIC NUMBERS
    • C:\DOCUMENTS AND SETTINGS\MILASHKA\MYPROGRAM\DATA.TXT

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  29. ПАТТЕРНЫ

    View full-size slide

  30. ЧТО ДЕЛАЕМ
    • ОТДЕЛЯЕМ СТАРЫЙ КОД:
    • ИНТЕРФЕЙС
    • ФАСАД
    • НОВЫЙ КОД СРАЗУ ДЕЛАЕМ ХОРОШО

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  34. ВМЕСТО ЗАКЛЮЧЕНИЯ

    View full-size slide

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

    View full-size slide

  36. DRY, KISS, YAGNI
    • DRY - DON’T REPEAT YOURSELF
    • KISS - KEEP IT STUPID SIMPLE
    • YAGNI - YOU AREN’T GONNA NEED IT

    View full-size slide

  37. SOLID
    • ПЯТЬ ОСНОВНЫХ ПРИНЦИПОВ ОБЪЕКТНО- ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ И
    ПРОЕКТИРОВАНИЯ.

    View full-size slide

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

    View full-size slide

  39. ВОПРОСЫ?

    View full-size slide