kamyshev.code – Telegram
kamyshev.code
1.77K subscribers
40 photos
565 links
Архитектура, код, софт-скиллы и всё остальное. Вопросы, пожелания, комментарии — @igorkamyshev

https://kamyshev.me
Download Telegram
Мудрость из книги

Рефакторинг важен. Осенью купил курс Рефакторинг.Гуру, сейчас до него добрался.

В первых разделах рассмотрены запахи плохого кода — признаки необходимости рефакторинга.

Самый распространный запах — единица кода (метод, класс, модуль) стала слишком большой.

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

Не нужно бояться, что это приведет к ухудшению производительности. Чаще всего, это не играет роли.

Конспект интерактивного курса "Рефакторинг.Гуру".

#рефакторинг
Мудрость из книги

Еще один запах плохого кода — одержимость элементарными типами.

1. Когда деньги выражаются как float или телефонный номер как string — это проблема. Подобные значения должны быть выделены в класс, вместе с присущим ему поведением.

2. Когда константа используется для кодирования информации (например, USERADMINROLE = 1 для обозначения роли) — это проблема. Вместо этого лучше использовать разные классы.

3. Когда строковый константы выступают ключами ассоциативного массива — это проблема. Такие массивы легко заменяются DTO.

Конспект интерактивного курса "Рефакторинг.Гуру".

#рефакторинг
Мудрость из книги

Если параметров функции становиться больше 3-4 — случилась ошибка проектирования и ее нужно исправить.

Варианты этой проблемы:
1. Функция объединяет несколько алгоритмов. Тогда ее легко разбить на несколько функций с меньшим числом параметров.
2. Функция принимает набор связанных данных, но отдельными аргументами. В таком случае, параметры следует передавать единым аргументом — DTO.

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

Конспект интерактивного курса "Рефакторинг.Гуру".

#рефакторинг
Мудрость из книги

Если в нескольких местах встречаются одинаковые группы данных (например, параметры подключения к БД) — этот код, возможно, плох.

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

Конспект интерактивного курса "Рефакторинг.Гуру".

#рефакторинг
​​Нужная книга

Прошлой весной прочёл "Программирование без дураков" Катрин Пассинг и Йоханесса Яндера снова не совсем про код.

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

#softskills
Мудрость из книги

В хорошем коде редко встречается большое количество операторов switch и if. С такими местами нужно бороться.

Самый простой способ — изолировать их в специльной функции. Чтобы никакой внешний код не беспокоился об этом.

Если от этих условий меняется логика работы — можно использовать полиморфизм, или паттерн стратегия.

switch-if допустимы (даже необходимы) в абстрактных фабриках и фабричных методах.

Конспект интерактивного курса "Рефакторинг.Гуру".

#рефакторинг
Мудрость из книги

Если в дочернем классе неиспользуются методы/данные родительского — значит что-то не так. Обычно это происходит, если наследование используется только для переиспользования кода, а не отражения отношения "является". В таком случае следует заменить наследование композицией.

На мой взгляд наследование почти никогда не улушает кода и его всегда можно заменить композицей без ущерба для читаемости кода.

Конспект интерактивного курса "Рефакторинг.Гуру".

#рефакторинг
Мудрость из книги

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

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

Конспект интерактивного курса "Рефакторинг.Гуру".
Мудрость из книги

Если в проекте существует два класса, которые делают одно и тоже, но имеют разные интерфейс — беда.

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

Конспект интерактивного курса "Рефакторинг.Гуру".

#рефакторинг
​​В университете на Computer Science специальностях студенты разрабатывают свой язык.

Это хорошее упражнение, оно даёт знания о внутреннем устройстве языков, причинах принятия решений при дизайне этих языков.

После прочтения "Семь языков за семь недель" у меня сформировались требования к идельному языку программирования. В качестве упражнения я решил его написать. Процесс буду описывать в небольших статьях.

#justlang
Мудрость из книги

Если для небольшлого изменения поведения требуется внести много правок в код — что-то пошло не так.

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

Конспект интерактивного курса "Рефакторинг.Гуру".

#рефакторинг
Мудрость из книги

Очень распространенная проблема — параллельные иерархии наследования.

Скорее всего, эта проблема — ошибка на этапе проектирования. Вполне вероятно, что можно свети это к одной иерархии. Если нет — подумать и найти решение.

Конспект интерактивного курса "Рефакторинг.Гуру".

#рефакторинг
​​Наследование как ключевая проблема объектно-ориентированного дизайна

Читая книгу по рефакторингу укрепился в мысли, что наследование — зло. Усложняет код, делает его трудным для чтения и понимания. Вызывает сложности при внесении изменений.

Но ведь... Наследование — один из столпов ООП.

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

Выражать отношение "является"?
Вместо мышления в контексте что чем является, подумать о том, что умеет класс. Тогда выразить его специфику можно просто реализовав интерфейс.

Я уверен, что многие не согласны с этим. Пожалуйста — напишите мне (@igorkamyshev), почему. Из ваших комментарием соберем пост в защиту наследования.

#спор
Мудрость из книги

Если в приложении есть мертвый код — его нужно удалить.

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

Такой код появляется или когда приложение развивалось, а чистка кода не проводилась, или когда программисты решали будущие проблемы.

Конспект интерактивного курса "Рефакторинг.Гуру".

#рефакторинг
@iwanttobealight прислала поясняющую картинку и тематическую статью к последней ссылке — http://kafinfor.petrsu.ru/CSS/04.htm
Мудрость из книги

Если функция использует данные какого-то объекта, но не является методом этого объекта, возможно, стоит переместить ее.

Хорошая идея хранить данные и операции над ними в одном месте.

Конспект интерактивного курса "Рефакторинг.Гуру".

#рефакторинг