Мы много слышали о NFT. Теперь мы осваиваем концепцию взаимозаменяемости
TL;DR: Уважайте MAPPER. Сделайте взаимозаменяемым то, что является взаимозаменяемым в реальном мире, и наоборот.
Проблемы
- Ошибка биекция
- Над дизайном
Решения
- Определите взаимозаменяемые элементы в ваших доменах
- Смоделируйте их как взаимозаменяемые
Контекст
По данным Википедии
Взаимозаменяемость – это свойство товара или товара, отдельные единицы которого по существу взаимозаменяемы и каждая часть которого неотличима от другой части.
В программном обеспечении мы можем заменить взаимозаменяемые объекты другими.
При сопоставлении наших объектов с реальными мы иногда забываем о частичной модели и строим поверх дизайна.
Образец кода
Неправильный
public class Person implements Serializable { private final String firstName; private final String lastName;
public Person(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } }
shoppingQueueSystem.queue(new Person('John', 'Doe'));
Верно
public class Person { }
shoppingQueueSystem.queue(new Person()); // The identity is irrelevant for queue simulation
Обнаружение
[Х] Руководство
Это смысловой запах.
Нам нужно понять модель, чтобы проверить, правильная она или нет.
Теги
- Над дизайном
Заключение
Сделайте взаимозаменяемым то, что взаимозаменяемо, и наоборот.
Звучит просто, но требует дизайнерских навыков и избегания случайных сложностей.
Кредиты
Фото Андрей Метелев на Unsplash
Люди думают, что информатика — это искусство гениев, но на самом деле все обстоит наоборот: многие люди делают вещи, которые строятся друг на друге, как стена из мини-камешков.
Дональд Кнут
Эта статья является частью серии CodeSmell.
Повышение уровня кодирования
Спасибо, что являетесь частью нашего сообщества! Больше контента в публикации Level Up Coding.
Подписывайтесь: Twitter, LinkedIn, Информационный бюллетень
Level Up меняет рекрутинг в сфере технологий ➡️ Присоединяйтесь к нашему коллективу талантов