Про протекание домена говорят много. Но есть вещь менее очевидная — и гораздо более коварная: размытие границ функций.
Не домен протек. Протекла функция.
Давайте продолжим с дубликатами. Что же такое поиск дубликатов?
Поиск — это действия ищущего, розыски кого-чего-н. Он должен отвечать только на один вопрос: найдено/не найдено и с какой вероятностью это именно то, что искали?
ВСЕ!!!
Но в реальных системах к поиску незаметно приклеиваются другие глаголы:
— нашли → заблокировали
— нашли → запретили создание
— нашли → склеили
— нашли → переписали данные
И в этот момент это уже не поиск, а помесь крокодила 🐊 с курицей 🐔!
И вроде бы, «Что в этом такого?»
А последствия страшные:
— алгоритм поиска становится зависим от других процессов
— пороги начинают крутить под бизнес-метрики
— нельзя отдельно улучшать качество матчинга
— масштабирование усложняется, так как поиск на «входе» и «выходе» становится разными функциями
— систему трудно объяснить
❔Как проверить, что функция содержит больше одного глагола?
Задайте себе несколько вопросов:
1️⃣ Можно ли изменить политику, не трогая алгоритм?
Если нет — глаголы смешаны.
2️⃣ Возвращает ли функция только данные или уже принимает решение?
Правильный поиск возвращает кандидатов и score.
Если он возвращает isBlocked = true — это уже не только поиск.
3️⃣ Есть ли внутри side-effects?
Запись статуса, блокировка, изменение флага — это другой глагол.
4️⃣ Можно ли переиспользовать функцию в другом сценарии?
Если для аналитики нужно «выключать половину логики» — функция перегружена.
5️⃣ Можно ли назвать еe одним словом (и не покривить душой)?
Если имя звучит как findAndBlockDuplicateUser — ответ очевиден.
Разделяйте:
👯♀️Match — кто на кого похож
👩⚖️ Decision — что с этим делать
☝️ Action — конкретное действие
Поиск дубликатов — это не «найти и не отдать».
Это «найти — и только потом выбрать правильный глагол».
Ну, а если вы соскучились по цитатам, то вот Цветаева:
«Возьму и не отдам…
Отдам и вновь,
В горсть соберу, миг подержу — и брошу…
— Хорош словарь?»
💬 А у вас в системах есть мутировавшие глаголы?!
PS если не понятно, завтра подробнее с примерами!
