Каждый разработчик сравнивает атрибуты одинаково. Они ошибаются.
TL;DR: Не экспортируйте и не сравнивайте, просто сравнивайте.
- Проблемы
- Решения
- Контекст
- Образец кода
- Неправильный
- Правильно
- Обнаружение
- Теги
- Заключение
- Отношения
- Запах кода 63 — Зависть к функциям
- Maxi Contieri ・ Mar 23 ’21 ・ 2 min read
- Code Smell 101 — Сравнение с булевыми числами
- Maxi Contieri ・ Nov 11 ’21 ・ 2 min read
- Кредиты
- Программная инженерия Великие цитаты
- Maxi Contieri ・ Dec 28 ’20 ・ 13 min read
- Как найти зловонные части вашего кода
- Maxi Contieri ・ May 21 ’21 ・ 7 min read
Проблемы
-
Нарушение инкапсуляции
-
Дублирование кода
-
Нарушение сокрытия информации
-
Нарушение антропоморфизма
Решения
- Скрыть сравнение в одном методе
Контекст
Сравнение атрибутов активно используется в нашем коде.
Нам нужно сосредоточиться на поведении и ответственности.
Сравнение с другими объектами — это ответственность объекта. А не с нашими собственными.
Преждевременные оптимизаторы скажут нам, что это менее производительно.
Мы должны попросить у них реальные доказательства и противопоставить им более удобное решение.
Образец кода
Неправильный
if (address.street == 'Broad Street') {
if (location.street == 'Bourbon St') {
// 15000 usages in a big system
// Comparisons are case sensitive
Правильно
if (address.isAtStreet('Broad Street') {
}
// ...
if (location.isAtStreet('Bourbon St') {
}
// 15000 usages in a big system
function isAtStreet(street) {
// We can change Comparisons to case sensitive in just one place.
}
Обнаружение
[X] Полуавтоматическое
Мы можем обнаружить сравнение атрибутов с помощью синтаксических деревьев.
Для примитивных типов может быть хорошее применение, как и для многих других запахов.
Теги
- Инкапсуляция
Заключение
Нам нужно поместить обязанности в одно место.
Сравнение — одна из них.
Если некоторые из наших бизнес-правил изменятся, нам нужно будет изменить одну точку.
Отношения

Запах кода 63 — Зависть к функциям
Maxi Contieri ・ Mar 23 ’21 ・ 2 min read

Code Smell 101 — Сравнение с булевыми числами
Maxi Contieri ・ Nov 11 ’21 ・ 2 min read
Кредиты
Photo by Piret Ilver on Unsplash
Поведение — это самое важное в программном обеспечении. Это то, от чего зависят пользователи. Пользователям нравится, когда мы добавляем поведение (при условии, что это то, чего они действительно хотели), но если мы изменяем или удаляем поведение, от которого они зависят (вносим ошибки), они перестают нам доверять.
Майкл Фезерс

Программная инженерия Великие цитаты
Maxi Contieri ・ Dec 28 ’20 ・ 13 min read
Эта статья является частью серии CodeSmell.

Как найти зловонные части вашего кода
Maxi Contieri ・ May 21 ’21 ・ 7 min read