Вынужден сказать вам правду. Паттерны - это не только решения типовых проблем, но и бездонный источник идей для излишнего усложнения и запутывания кодовой базы:
- как только человек выучил паттерны, ему хочется применять их везде, и в первые месяцы после умных книжек программист творит сплошной оверинженеринг: в коде появляется в разы больше абстракций, чем нужно,
- абстракции не бесплатны: всякая гибкость, динамическая диспетчеризация, pure fabrication и мелкодисперсная декомпозиция повышают количество объектов, слоев и вызовов, просаживается производительность,
- часто код становится сложным для понимания, повышается порог входа: без глубоких знаний коллеги испытывают трудности из-за того, что вы перестали решать проблемы в лоб и применяете сложные для них концепции,
- усложняются отладка и тестирование: цепочки делегирования и фабрики маскируют реальные места ошибок, теряется стек, или в нем появляются непонятные промежуточные слои, перехватчики, а если используется рефлексия, то - динамически построенные абстракции, которых в коде никто не видит.
Что делать?
Только практика и менторин могут помочь не потерять время на оверинженеринг и эксперименты. Нужны задачи по:
- переписыванию кода с удалением паттерна
- выбору простейшего паттерна для решения проблемы
- использованию встроенных в язык возможностей, решающих ту же задачу, что и паттерн
- задачи с трейдофами, когда в условии должны быть NFR или дополнительные ограничения
- рефакторинг плохо написанных паттернов, упрощение, когнитивная оптимизация
- реальные проекты, где есть ограничения во времени и нужен компромис
Все это есть на курсе в виде сквозного проекта, подробнее тут: https://nodeua.com/Patterns-2025
- как только человек выучил паттерны, ему хочется применять их везде, и в первые месяцы после умных книжек программист творит сплошной оверинженеринг: в коде появляется в разы больше абстракций, чем нужно,
- абстракции не бесплатны: всякая гибкость, динамическая диспетчеризация, pure fabrication и мелкодисперсная декомпозиция повышают количество объектов, слоев и вызовов, просаживается производительность,
- часто код становится сложным для понимания, повышается порог входа: без глубоких знаний коллеги испытывают трудности из-за того, что вы перестали решать проблемы в лоб и применяете сложные для них концепции,
- усложняются отладка и тестирование: цепочки делегирования и фабрики маскируют реальные места ошибок, теряется стек, или в нем появляются непонятные промежуточные слои, перехватчики, а если используется рефлексия, то - динамически построенные абстракции, которых в коде никто не видит.
Что делать?
Только практика и менторин могут помочь не потерять время на оверинженеринг и эксперименты. Нужны задачи по:
- переписыванию кода с удалением паттерна
- выбору простейшего паттерна для решения проблемы
- использованию встроенных в язык возможностей, решающих ту же задачу, что и паттерн
- задачи с трейдофами, когда в условии должны быть NFR или дополнительные ограничения
- рефакторинг плохо написанных паттернов, упрощение, когнитивная оптимизация
- реальные проекты, где есть ограничения во времени и нужен компромис
Все это есть на курсе в виде сквозного проекта, подробнее тут: https://nodeua.com/Patterns-2025
❤9💯5🔥4⚡2👍2🤯1
Нам не нужен паттерн Adapter, поскольку EventEmitter уже передает нужные события во все места напрямую.
Нам не нужен паттерн Facade, поскольку наша абстракция уже, к счастью, блокирует весь реальный поток, считайте, нам повезло.
Нам не нужен Data Access Layer, поскольку ORM делает запросы, а мы еле успеваем не затопить соседей.
Нам не нужна какая-то дополнительная архитектура, потому что каждый микросервис уже имеет свой личный люк к истине.
Нам не нужен курс по паттернам, все мемы уже собраны здесь: https://t.me/+I-suNalcHC03NGUy
Нам не нужен паттерн Facade, поскольку наша абстракция уже, к счастью, блокирует весь реальный поток, считайте, нам повезло.
Нам не нужен Data Access Layer, поскольку ORM делает запросы, а мы еле успеваем не затопить соседей.
Нам не нужна какая-то дополнительная архитектура, потому что каждый микросервис уже имеет свой личный люк к истине.
Нам не нужен курс по паттернам, все мемы уже собраны здесь: https://t.me/+I-suNalcHC03NGUy
🤣21❤2👍1
Открытые группы и каналы
- Україномовний канал спільноти https://t.me/metarhia
- Україномовна група https://t.me/nodeua
- Канал с общими вопросами https://t.me/HowProgrammingWorks
- Группа с общими вопросами https://t.me/MetarhiaHPW
- Канал для CTO и архитекторов https://t.me/MetarhiaChiefs
- Группа для техстека Metarhia: https://t.me/metaserverless
- Канал для начинающих https://t.me/metaedu
- Группа для начинающих https://t.me/+znsE73dPWLQ5Nzky
- Группа сообщества по асинхронному программированию https://t.me/asyncify
- Онбординг для желающих пойти на курс Patterns: https://t.me/patterns_javascript
Закрытые ресурсы
- Группа сообщества - доступна всем курсам - https://www.patreon.com/cw/tshemsedinov/membership
- Еженедельный созвон по четвергам - доступен всем курсам - https://www.patreon.com/cw/tshemsedinov/membership
- Курс по ноде и асинхронному программированию - https://www.patreon.com/cw/tshemsedinov/membership
- Курс по паттернам - https://nodeua.com/Patterns-2025
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥2👍1
1. Ad-hoc polymorphism
- Function and method overloading
- Operator overloading
- Type-class polymorphism (e.g. Haskell type classes, Rust traits)
- Coercion polymorphism
2. Subtype polymorphism
- Class inheritance
- Interface / protocol polymorphism
- Structural (duck typing) polymorphism
3. Parametric polymorphism
- Generic functions
- Generic data structures
4. Dispatch mechanisms
- Dynamic dispatch
- Virtual functions and methods
- Multiple or multimethod dispatch
👉 Примеры и пояснения тут: https://t.me/patterns_javascript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4🔥1
Началась регистрация на бесплатный курс Patterns Mini 👉 https://nodeua.com/Patterns-2025-free
🎉8👍5🤩4❤3