Блок 3 · Урок 4 из 5 · ≈ 8 минут · цель: распознавать обертки без глубины
Лишние классы и транзитные модули
Classitis and pass-through modules
Главная мысль: слой полезен только тогда, когда он скрывает решение или меняет уровень абстракции.
Pass-through: принимает и почти сразу передает дальше.
Опасность: много имен, мало смысла.
Зачем это вам
Агент может создать контроллер, сервис, менеджер, helper и adapter, потому что “так архитектурно”. Но если каждый слой только передает те же параметры дальше, система становится длиннее, а не понятнее.
Нужен простой фильтр: какой слой скрывает решение? Если никакой, возможно, мы видим classitis - размножение структур без уменьшения сложности.
Суть
Транзитный модуль (pass-through module) почти не добавляет поведения: принимает вызов, немного переименовывает параметры и отправляет дальше.
Classitis - привычка создавать классы, слои и обертки без достаточной глубины. В результате интерфейсов становится больше, а скрытого знания меньше не становится.
Слой оправдан, когда он скрывает политику, нормализует данные, управляет ошибками, защищает внешний код от провайдера или собирает несколько шагов в понятную операцию.
Аналогия
Транзитный модуль похож на человека, который передает вашу просьбу соседу теми же словами. Если он ничего не решает, не переводит и не фильтрует, он только добавляет задержку.
Запомните одно
Каждый новый слой должен покупать что-то: скрытое знание, единый контракт, защиту от провайдера или локальность изменений.
Фраза агента → что он имеет в виду
- «Добавлю service layer»
- Спросите, какая политика будет жить в слое и станет ли вызывающий код проще.
- «Этот метод просто делегирует»
- Возможно, метод не несет глубины и только удлиняет путь понимания.
- «Здесь слой защищает от API провайдера»
- Это уже смысл: внешний код не должен знать детали чужого API.
Мини-словарь
- Pass-through module
- Транзитный модуль: прослойка, которая почти ничего не скрывает.
- Classitis
- Размножение классов и слоев без соответствующего уменьшения сложности.
Проверьте себя
Когда новый слой оправдан?
Верно: слой должен уменьшать сложность, а не только добавлять структуру.
Связанные материалы
Основной источник
- A Philosophy of Software Design, John Ousterhout.
- APOSD vs Clean Code, John Ousterhout.