Вы наверняка видели код, в котором на событиях или на роутах висит обработчик, который содержит и часть бизнес-логики и обращение к базе и работу с сетью. Такой портянка-код характерен для чат-ботов и серверов. Как это можно написать иначе и как в этом помогают паттерны?
Нам нужно отделить три составляющих кода (грубо говоря, совсем упрощая): транспорт, бизнес-логику, базу. Но обеспечить между ними зацепление, минимальное необходимое. Лучше всего разнести их в три разные модуля (на это не обязательно), можно разнести в три разные программные компонента или в три разные абстракции. Одна обеспечивает работу с базой и ничего не знает о транспорте, а вторая - работу с транспортом и ничего не знает о базе. Дальше их должна сшивать общая абстракция (по принципу композиции, можно и агрегации). Какие паттерны тут помогут?
🧩 Mediator - снижает зацепление и подойдет нам для изоляции базы от транспорта.
🧩 Strategy - реализация стратегии для JavaScript это Map<PropertyKey, Implementation> что позволяет абстрагироваться от Implementation, находя его по ключу и работая по обобщенному интерфейсу.
🧩 Bridge - позволяет разделять абстракции и снижать зацепление, но не характерен для JavaScriot.
🧩 Abstract factory - для JavaScript абстрактная фабрика сводится к стратегии инстанциирования: Map<PropertyKey, Creator> и применяется как и стратегия, но в том месте, где нам нужно создавать инстансы (тут Creator это любой порождающий паттерн).
Признаки проблемы:
• Если вы не можете модифицировать работу с базой не трогая транспорт или бизнес-логику, не задевая базу, то нужно начинать внедрять разделение ответственности (separation of concerns).
• Если сложно написать юниттесты, а что-то протестировать можно только все целиком - ну вот оно, вы нашли проблему.
• Если код невозможно переиспользовать и вы чувствуете, что одно и то же пишете уже много раз.
Примеры на курсе по паттернам 👉 https://nodeua.com/Patterns-2024-buy.html
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Metarhia/NodeUA - Node.js Ukraine Community
- What is a service?
- Everything that's not a controller is a service
- Where is a model?
- Models.... are on the stage
- Everything that's not a controller is a service
- Where is a model?
- Models.... are on the stage
🚀 Структура программы менторинга Patterns 2024 постепенно вырисовывается
🧩 Unit 1: Structure and Modularity
Week 1: Code Characteristics and Optimization Strategies
Week 2: Native features in language and platforms
Week 3: Instantiation: Creational Patterns and Techniques
Week 4: Isolation: Separation of Concerns
🧩 Unit 2: Execution and Contracts
Week 5: Contracts: Interfaces for Component Interaction
Week 6: Decoupling with Events and Messaging
Week 7: Streams: Data Flows and Transformations
Week 8: Handling Errors: Exceptions and Soft Failures
🧩 Unit 3: Runtime for Applications
Week 9: Semantics: Expressive DSLs
Week 10: All-agnostic as a Default Strategy
Week 11: Scaling Applications and Architectural Styles
Week 12: Methodology: How to Start Applying Concepts
Начало 1 октября, уже а наставников кол-во ограниченное, я не успею подготовить новых до начала, так что резервируете.
На днях обновим сайт и разложим темы по неделям https://nodeua.com/Patterns-2024-buy.html
🧩 Unit 1: Structure and Modularity
Week 1: Code Characteristics and Optimization Strategies
Week 2: Native features in language and platforms
Week 3: Instantiation: Creational Patterns and Techniques
Week 4: Isolation: Separation of Concerns
🧩 Unit 2: Execution and Contracts
Week 5: Contracts: Interfaces for Component Interaction
Week 6: Decoupling with Events and Messaging
Week 7: Streams: Data Flows and Transformations
Week 8: Handling Errors: Exceptions and Soft Failures
🧩 Unit 3: Runtime for Applications
Week 9: Semantics: Expressive DSLs
Week 10: All-agnostic as a Default Strategy
Week 11: Scaling Applications and Architectural Styles
Week 12: Methodology: How to Start Applying Concepts
Начало 1 октября, уже а наставников кол-во ограниченное, я не успею подготовить новых до начала, так что резервируете.
На днях обновим сайт и разложим темы по неделям https://nodeua.com/Patterns-2024-buy.html
https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-timecodes.md
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Index/Courses/Patterns-timecodes.md at master · HowProgrammingWorks/Index
Metarhia educational program index 📖. Contribute to HowProgrammingWorks/Index development by creating an account on GitHub.
▫️ Отделяете ли исключения (ошибки в коде)?
▫️ Отделяете ли soft ошибки (без исключений)?
▫️ Отделяете ли операционные ошибки (net, i/o, db...)?
▫️ Делаете автоматический retry?
▫️ Делаете serialize для передачи ошибок по сети?
▫️ Создаете ли классы для кастомных ошибок?
▫️ Используете ли коды ошибок вместо классов?
▫️ Делаете цепочки ошибок error.cause?
▫️ Используете AggregateError?
▫️ Практикуете return early и fail-fast?
▫️ Практикуете guards?
▫️ Применяете Either?
▫️ Реализуете graceful shutdown?
▫️ Перезапускаете процесс на любой ошибке?
▫️ Перезапускаете на операционных ошибках?
▫️ Перезапускаете процесс на доменных ошибках?
▫️ Имеете стратегию восстановления после ошибок?
▫️ Что используете для сбора логов?
▫️ Что для агрегации и консолидации логов?
▫️ Замеряете потерю производительности от ошибок?
▫️ Используете критические секции и web locks?
▫️ Используете promise.finally()?
▫️ Как трекаете и логируете контекст исполнения?
▫️ Генерируете UUID для трекинга контекстов?
▫️ Создаете ли точки восстановления состояния?
▫️ Используете AI для анализа стек-трейсов?
▫️ Применяете практику circuit breaker?
▫️ Очищаете stack trace от критических данных?
▫️ Практикуете blue-green deployments?
▫️ Практикуете feature toggles?
▫️ Практикуете canary release?
▫️ Практикуете shadow deployments?
▫️ Практикуете progressive delivery?
▫️ Практикуете rolling deployments?
▫️ Практикуете hotfix deployment?
▫️ Практикуете hot reload (без перезапуска)?
▫️ Имеете fallback при возникновении ошибок?
👉 https://www.patreon.com/tshemsedinov
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Кто говорит, что программист должен обязательно учить алгоритмы, тренироваться на литкоде и читать книжку с кабанчиком? Вы тоже не шарите, потому, что не понимаете переходных процессов в полупроводниках, не знаете как возникает диффузионный ток на pn-переходе. Нет у вас базы )))) Так вот, не нужно быть инженером по двигателям внутреннего сгорания, чтобы водить автомобиль. 99999 из 100тыс. программистов на работе не напишут поворот АВЛ-дерева, это не нужно знать, чтобы писать сложные программные системы для медицины, логистики или банка. Это спрашивают на собесах — правда, но только потому, что найм сломан и в галерах и в фаангах, там вообще началась брежневизация руководства, полный отрыв от реальности и загнивание, как в позднем совке. Это все возможно только потому, что они уже набрали вес и скорость и теперь могут сидеть на палубе титаника, слушать музыку, пить шампанское и жевать сопли, пока он тонет. Есть очень много тем сложных и очень нужных в работе программиста, которые будут 100 раз в день использоваться на любой работе инженерной: навыки декомпозиции абстракций, управления зацеплением абстракций, т.е. усилять и снижать зацепление и понимать для чего это делаешь, навыки разделения ответственности между программными компонентами (separation of concerns), внедрение зависимостей, инверсия управления, системы модульности, это все из чего строится структура приложения. А мы видим, что люди цикл с массивом выучили и сразу переходят к архитектуре.
Вот вы говорите, алгоритмы, алгоритмы, а тут открываешь ноду и видишь такое: https://github.com/nodejs/node/blob/7014e50ca32d39b94d04e04a5e6498e5c2f4346f/lib/path.js#L249-L274
🧩 Patterns 2024: The mentoring program is ready, I'll prepare translations tomorrow )))
🗓 Start: 1 October; Duration: 12 weeks
👉 Training description: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024.md
👉 Registration for the course: https://forms.gle/wuJ3nvSeF2apgUESA
🗓 Start: 1 October; Duration: 12 weeks
👉 Training description: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024.md
👉 Registration for the course: https://forms.gle/wuJ3nvSeF2apgUESA
🚀 Patterns 2024 Тренинг с наставниками
Перевод готов, советую его прочитать даже тем, кто не берет курс, потому что это почти статья и там много идей как усовершенствовать свои знания и структурировать их: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024-ru.md
Автор утверждает, что это самые важные вещи, которые следует учить и практиковать:
📂 Системы модульности, внедрение зависимостей (DI) и инверсия управления (IoC)
📦 Декомпозиция абстракций и принципы GRASP с современной интерпретацией
🧩 Паттерны «Банды четырех» (GoF) переосмысленные для JavaScript и TypeScript
🔮 Принципы изоляции и SoC (Разделение ответственностей)
👷🏻♂️ Разделение прикладного и системного кода (разные специальности)
🧩 Принципы SOLID: SRP, OCP, ISP, DIP, LSP с адаптацией для разных парадигм
🌟 Мультипарадигменное программирование и создание доменных языков (DSL)
🧩 Контрактное программирование и декларативное моделирование через схемы
🏛 Чистая архитектура (Clean) и слоеная архитектура (Onion или Layered)
(читать дальше...)
Перевод готов, советую его прочитать даже тем, кто не берет курс, потому что это почти статья и там много идей как усовершенствовать свои знания и структурировать их: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024-ru.md
Автор утверждает, что это самые важные вещи, которые следует учить и практиковать:
📂 Системы модульности, внедрение зависимостей (DI) и инверсия управления (IoC)
📦 Декомпозиция абстракций и принципы GRASP с современной интерпретацией
🧩 Паттерны «Банды четырех» (GoF) переосмысленные для JavaScript и TypeScript
🔮 Принципы изоляции и SoC (Разделение ответственностей)
👷🏻♂️ Разделение прикладного и системного кода (разные специальности)
🧩 Принципы SOLID: SRP, OCP, ISP, DIP, LSP с адаптацией для разных парадигм
🌟 Мультипарадигменное программирование и создание доменных языков (DSL)
🧩 Контрактное программирование и декларативное моделирование через схемы
🏛 Чистая архитектура (Clean) и слоеная архитектура (Onion или Layered)
(читать дальше...)
🧩 Тарифные планы тренинга с наставниками Patterns 2024
∙ Minimal: обучение в общей группе без наставника, но с групповыми семинарами
∙ Standard: обучение с наставником в небольших группах (10 человек)
∙ Professional: обучение с наставником, индивидуально и в группах, дополнительные материалы
∙ Exclusive: персонализированный учебный трек с автором курса и приглашенными экспертами
👉 Подробности: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024-ru.md
Формат тренинга
🗓 12 недель (3 месяца) + онбординг (1 неделя) + секретный модуль
👍 Доступ к материалам курса дается навсегда
🕑 Каждую неделю обязательно: 1 час лекций + 2 часа семинаров + 2 часа самостоятельной работы
🥋 Тренировки и групповая работа с наставниками, а не только смотрение видосов и чтение
🙋♂️ По желанию: для глубокого погружения +3 часа дополнительных материалов на старших тарифах
🏅 По завершению курса Вы получаете сертификат
⚠️ Входные требования: базовый JavaScript + рекомендуется опыт практического программирования
🙅 Для кого не подойдет: не для начинающих, бесплатные материалы для начинающих ищите у Тимура
💳 Рассрочка: помесячная оплата для всех тарифов кроме минимального
🗺 После курса участие в комьюнити выпускников, где уже тысячи людей по всему миру
👉 Купить: https://nodeua.com/Patterns-2024-buy.html
∙ Minimal: обучение в общей группе без наставника, но с групповыми семинарами
∙ Standard: обучение с наставником в небольших группах (10 человек)
∙ Professional: обучение с наставником, индивидуально и в группах, дополнительные материалы
∙ Exclusive: персонализированный учебный трек с автором курса и приглашенными экспертами
👉 Подробности: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024-ru.md
Формат тренинга
🗓 12 недель (3 месяца) + онбординг (1 неделя) + секретный модуль
👍 Доступ к материалам курса дается навсегда
🕑 Каждую неделю обязательно: 1 час лекций + 2 часа семинаров + 2 часа самостоятельной работы
🥋 Тренировки и групповая работа с наставниками, а не только смотрение видосов и чтение
🙋♂️ По желанию: для глубокого погружения +3 часа дополнительных материалов на старших тарифах
🏅 По завершению курса Вы получаете сертификат
⚠️ Входные требования: базовый JavaScript + рекомендуется опыт практического программирования
🙅 Для кого не подойдет: не для начинающих, бесплатные материалы для начинающих ищите у Тимура
💳 Рассрочка: помесячная оплата для всех тарифов кроме минимального
🗺 После курса участие в комьюнити выпускников, где уже тысячи людей по всему миру
👉 Купить: https://nodeua.com/Patterns-2024-buy.html
Проблема сложности, которую решают микросервисы, на самом деле решается проектированием структуры кода на среднем уровне, т.е. люди от функций и классов хотят перескочить сразу к архитектуре, минуя модули, слои, подсистемы. Если код хорошо структурирован на среднем уровне благодаря:
- системам модульности,
- внедрению зависимостей и инверсии управления,
- архитектурным границам и слоям,
- декомпозиции абстракций,
- separation of concerns,
- information expert,
- контрактному программированию,
- управлению, сокрытию и изоляции сложности,
- разделению прикладного и системного кода,
то такое приложение можно в течении нескольких часов собрать в 2, 3, 5, 105 инстансов, заменив взаимодействие между их структурными компонентами на RPC и трансляцию событий. Так, что модули и подсистемы знать не будут, что они запущены не в одном процессе. А если код «рыхлый», то его и микросервисом не изолировать, у такого сервиса будет большой внешний трафик, потому, что зацепление на чужие данные и чужую логику высоки. Так что, «распиливание» это только распиливание бюджета команд и бюджета на инфраструктуру. Обойти вопрос хаоса на среднем уровне при помощи чуда не выйдет. Чтобы построить Application архитектуру, нужна качественная структура, а чтобы перейти к Solution и Enterprise архитектуре, нужна качественная Application архитектура. Попытки перескочить от функции, цикла и массива к Solution архитектуре приводят к появлению монстров типа облачных функций, микролитов, моносервисов и скоро мы увидим Variable as a Service, а потом гору этих абстракций, вываленных на уровень Solution, не сгруппированных и не изолированных в структурные единицы управления сложностью. Чуда не будет, ни кто не решит за нас вопрос перехода от отдельного кирпича к небоскребу, нужны промежуточные структурные единицы.
- системам модульности,
- внедрению зависимостей и инверсии управления,
- архитектурным границам и слоям,
- декомпозиции абстракций,
- separation of concerns,
- information expert,
- контрактному программированию,
- управлению, сокрытию и изоляции сложности,
- разделению прикладного и системного кода,
то такое приложение можно в течении нескольких часов собрать в 2, 3, 5, 105 инстансов, заменив взаимодействие между их структурными компонентами на RPC и трансляцию событий. Так, что модули и подсистемы знать не будут, что они запущены не в одном процессе. А если код «рыхлый», то его и микросервисом не изолировать, у такого сервиса будет большой внешний трафик, потому, что зацепление на чужие данные и чужую логику высоки. Так что, «распиливание» это только распиливание бюджета команд и бюджета на инфраструктуру. Обойти вопрос хаоса на среднем уровне при помощи чуда не выйдет. Чтобы построить Application архитектуру, нужна качественная структура, а чтобы перейти к Solution и Enterprise архитектуре, нужна качественная Application архитектура. Попытки перескочить от функции, цикла и массива к Solution архитектуре приводят к появлению монстров типа облачных функций, микролитов, моносервисов и скоро мы увидим Variable as a Service, а потом гору этих абстракций, вываленных на уровень Solution, не сгруппированных и не изолированных в структурные единицы управления сложностью. Чуда не будет, ни кто не решит за нас вопрос перехода от отдельного кирпича к небоскребу, нужны промежуточные структурные единицы.
Forwarded from Metarhia/NodeUA - Node.js Ukraine Community
Which techniques do you use to control state within software abstractions? (multiselect or add in comments)
Anonymous Poll
43%
Pure Functions
13%
Idempotent Functions
12%
State Hiding Primitives
23%
Functional Techniques
52%
OOP Techniques
23%
Flags
9%
Critical Sections and Locks
29%
Shared State
10%
Conflict-Free Data Structures
10%
Conflict-Free Flow Control
⚠️ Завтра первый день онбординга на Patterns 2024.
Это нулевая неделя, формируются группы и назначаются менторы. Процесс оказался не таким простым организационно. Всем, кто зарегистрировался - прошу спокойно подождать до вечера и если вам на почту не придет приглашение, то утром обратиться в нашу поддержку, там отдельные люди занимаются вопросами платежей, рассрочкой, потерянными контактами (часть людей везде указывает разные почты и телефоны, вводят "Юра" или "EA 00 00 FF FF" в поле фамилии и невозможно понять, кто это).
∙ Поддержка по платежам: https://t.me/patterns2024 или на почту javascript.patterns.2024@gmail.com
∙ Кто зарегистрировался но не оплатил, то платить тут https://nodeua.com/Patterns-2024-buy.html
∙ Кто оплатил, но не заполнил форму, это тут: https://forms.gle/wuJ3nvSeF2apgUESA
∙ Кто и зарегистрировлся и оплатил, но не полял куда попал, то можно посмотреть описание тренинговой программы на трех языках тут https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024.md
∙ Курсы по ноде и по асинхронному программированию тут: https://www.patreon.com/tshemsedinov
Пишу это потому, что есть люди, которые пишут, что хотели попасть на курс по ноде и уже где-то оплатили, а оказалось, что они на паттерны попали.
Это нулевая неделя, формируются группы и назначаются менторы. Процесс оказался не таким простым организационно. Всем, кто зарегистрировался - прошу спокойно подождать до вечера и если вам на почту не придет приглашение, то утром обратиться в нашу поддержку, там отдельные люди занимаются вопросами платежей, рассрочкой, потерянными контактами (часть людей везде указывает разные почты и телефоны, вводят "Юра" или "EA 00 00 FF FF" в поле фамилии и невозможно понять, кто это).
∙ Поддержка по платежам: https://t.me/patterns2024 или на почту javascript.patterns.2024@gmail.com
∙ Кто зарегистрировался но не оплатил, то платить тут https://nodeua.com/Patterns-2024-buy.html
∙ Кто оплатил, но не заполнил форму, это тут: https://forms.gle/wuJ3nvSeF2apgUESA
∙ Кто и зарегистрировлся и оплатил, но не полял куда попал, то можно посмотреть описание тренинговой программы на трех языках тут https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024.md
∙ Курсы по ноде и по асинхронному программированию тут: https://www.patreon.com/tshemsedinov
Пишу это потому, что есть люди, которые пишут, что хотели попасть на курс по ноде и уже где-то оплатили, а оказалось, что они на паттерны попали.
«выкладывайте код из вашей повседневной разработки в сторис, это легко и весело, и через 24 часа они исчезнут»