Java Clean Code: как сделать код читаемым и красивым

Знакомство

Зураб Белый
Руководитель практики Java

Первую программку написал в 14 лет, тогда и связал свою жизнь с IT. В коммерческой разработке более 15 лет. Прошел путь от джуна до руководителя отдела Java-разработки.

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

Соведущий подкаста «Скрамное ИТ». Преподаватель, автор курсов и спикер на различных конференциях и митапах. В свободное время занимается гончарным делом, масштабным моделированием и путешествует.

Зачем писать понятный код?

Понять, что делает код
Понять, как код это делает

Что важно соблюдать во время разработки

🗸
Правильные названия
🗸
Единый стиль кода
🗸
Модульность
🗸
Иерархия
🗸
Соглашения

Базовые принципы проектирования

  • KISS (Keep It Simple, Stupid)
  • DRY (Don’t Repeat Yourself)
  • YAGNI (You Aren’t Gonna Need It)
  • APO (Avoid Premature Optimization)
  • BDUF (Big Design Up Front)
Почему бы
просто
не прочесть
определения
и не начать
использовать?
  • большинство паттернов и принципов было сформулировано давно;
  • и не всегда четко;
  • и не всегда для разработки ПО;
  • за десятилетия понятия размывались и/или растягивались.

KISS

Keep it short simple
Делайте вещи проще
  • Kiss был разработан ВМС США в 1960 году
  • Простые системы будут работать лучше и надежнее
  • Не придумывайте к задаче более сложного решения, чем ей требуется
  • Иногда самое разумное решение оказывается и самым простым
Keep It Simple, Stupid
Будь проще
  • Порой наиболее правильное решение – это наиболее простая реализация задачи, в которой нет ничего лишнего
  • Простейшее объяснение какого-либо явления с большей вероятностью будет точным, чем более сложные объяснения
  • Согласно KISS следует программировать и писать, как можно более упрощенно

YAGNI

You aren't gonna need it
Вам это не понадобится
  • Принцип проектирования ПО, направленный на отказ от избыточной функциональности
  • Всегда пишите только тот код, который действительно нужен здесь и сейчас, а не тот, который, как вам кажется, понадобится в будущем
You ain't gonna need it
Тебе это не понадобится
  • Все что не нужно в системе и не прописано в требованиях – не следует и реализовывать
  • Программист не сжигает напрасно бюджет, не тратит время и другие ресурсы, а просто делает то, что действительно от него хотят

APO

Avoid Premature Optimization
Избегайте преждевременной оптимизации
  • Разработка – это про деньги
  • Никому не нужны программы, которые стоят больше, чем бизнес может себе позволить
  • Оптимизировать программы по любому параметру стоит только после того, как станет понятно, нужна ли эта оптимизация
  • Прежде чем вы погрузитесь в детали реализации, убедитесь, что эти оптимизации действительно полезны
  • Преждевременная оптимизация – зло
  • Преждевременная оптимизация может привести к задержкам при написании кода и, следовательно, увеличит затраты времени на вывод функций на рынок

Промежуточные выводы

KISS
  • Снижать сложность воспринимаемых за раз компонентов
  • Делать маленькими классы и методы в них
  • Соблюдать принцип единственной ответственности
  • Снижать количество зависимостей в классах
  • Уменьшать сложность методов
YAGNI
  • Не пренебрегать дизайном системы
  • Интерфейсы, разделение по слоям и архитектурные паттерны может быть сложно применить в будущем
  • Лучше применять YAGNI к разработке частей кода, которые не потребуются в ближайшем будущем
APO
  • Не возводить оптимизацию в ранг религии
  • Для распространенных инструментов обычно существует устоявшийся набор возможных оптимизаций и сценариев, когда что использовать
  • Сначала убедиться в необходимости, потом оптимизировать

DRY

DRY – don’t repeat yourself (Не повторяйся)

  • Избегайте копирования кода
  • Выносите общую логику
  • Прежде чем добавлять функционал, проверьте в проекте, может, он уже создан
  • Используйте константы
  • Каждая часть знания должна иметь единственное, непротиворечивое и авторитетное представление в рамках системы
  • Изменение единственного элемента системы не должно требовать внесения изменений в другие, логически не связанные элементы
Есть опасность нарушения принципа KISS!

BDUF

BDUF – Big Design Up Front (Глобальное проектирование прежде всего)

  • Перед тем, как приступать к разработке необходимо заранее продумать и спроектировать всю информационную систему
  • Применять данный подход не на весь проект, а только на ту часть функциональности, который нужно сделать в рамках текущей итерации разработки
Есть опасность нарушения принципа APO!

Выводы

Принципы – это инструмент решения проблемы, а не ее создания, применять их стоит очень осознанно
Для каждой ситуации будут свои принципы проектирования и/или их пропорции
Т.к. некоторые принципы часто могут противоречить друг другу (KISS vs DRY), то придется искать компромисс

Единого рецепта не существует!

Видео лекции