Паттерны и принципы — зачем учить
Паттерны учат не ради собеседования. Их ценность — в кругозоре и в том, что когда-нибудь возьмёшь оттуда идею. Главное — не превратить в карго-культ.
Суть
В JS-сообществе паттерны и Computer Science часто воспринимают как балласт для собесов. В C#/Java/C++ — ценят выше. Истина: знать обзорно, применять выборочно, переосмыслять раз в 3-4 года.
Зачем учить паттерны
- Кругозор — знать о существовании
- Резерв идей — раз в жизни понадобится
- Общий язык с командой — «применил тут Adapter»
- Понимание чужого кода — узнаёшь паттерны
- Помощь AI — правильный нейминг + структура улучшают результат
Правило 25/25/50
- 25% паттернов применяешь часто
- 25% применяешь редко
- 50% просто знать о существовании
- Bridge, Composite, Flyweight — редкие
- Adapter, Observer, Strategy — частые
- Proxy, Decorator, Facade — постоянные
Главная опасность
«Главное, чтобы это всё не стало карго-культом.»
- Паттерн ради паттерна — вред
- Демонстрация знаний коллегам — антипаттерн
- 30% людей учат паттерны для повышения самооценки
- 5000 строк там, где хватит 100 — скрытый оверинжиниринг
- «Сговор архитекторов» — приняли решение, никто не трогает
Адаптация под JS
- GoF написан для Java/C#/Smalltalk
- В JS first-class функции — паттерн меняется
- Strategy = словарь функций по ключу, а не иерархия классов
- Observer = EventEmitter/EventTarget
- Iterator = generator/async iterable
- Adapter — функция, не класс
Пример: Strategy без классов
const strategies = {
cash: (amount) => amount,
card: (amount) => amount * 1.02,
crypto: (amount) => amount * 0.99,
};
const pay = (kind, amount) => strategies[kind](amount);
- Никакой иерархии классов
- Никакого
extends Strategy - Та же гибкость, меньше кода
- CTO старой школы скажет «переписывай — это не по банде четырёх»
Когда переосмыслять
- Каждые 3-4 года полный пересмотр
- При смене языка/фреймворка
- При смене домена (бухгалтерия → медицина)
- Знание без обновления мертвеет
Аналогия
«Если человек учился функциональному программированию, но никогда не применял — почему он считает это знание? Это знание только тогда, когда применяется.»
Принципы (SOLID/GRASP)
- SOLID — единая ответственность, открытость, замещение, разделение интерфейсов, инверсия зависимостей
- GRASP — Information expert, Creator, Controller, Low coupling, High cohesion
- В JS они работают, но реализуются иначе
- Не дрочиться на формулировки — понимать суть
Антипаттерны изучения
- Учить определения наизусть
- Слепо переносить из Java/C#
- Применять все 23 GoF подряд
- Использовать ради красоты в коде
- Возмущаться, когда коллега не применил
- Бесконечно спорить, какой паттерн «правильный»
Когда паттерн полезен
- Решает реальную проблему в этом проекте
- Команда понимает и принимает
- Не усложняет код больше чем убирает дублирование
- Можно объяснить «зачем», не упоминая GoF
🎓 Источники
- 🎓 [🛑 Вопросы на интервью: SOLID, GRASP, паттерны GoF] · 2024-06-19 · YouTube
- Тезисы: разрыв теории и работы; JS-сообщество против C#/Java; не карго-культ; не тянуть всё в проект; переосмыслять 3-4 года
- 🎓 [🤷 Про софтскилы CTO и архитекторов] · 2025-11-29 · YouTube
- Тезисы: Strategy = коллекция функций; CTO натягивают банду четырёх по Фаулеру на Swift и Kotlin
- ⚡ [🙋 Будет ли существовать профессия фронтендер] · 2025-12-06 · YouTube
- Тезисы: правило 25/25/50; редкие паттерны — запас идей
- 🎓 [Нужны ли нам знания о шаблонах разработки] · AsForJS · 2025-11-04 · YouTube