Что такое JSON Patch?
#architecture
Для простоты примера рассмотрим Todo-list. Приходит задача добавить копирование одного todo элемента. Как вы ее спроектируете? Это реальный вопрос с собеседований.
Можно, переложить задачу на FE, чтобы он воспользовался существующим endpoint-ом для создания. Не удобно для массового копирования или добавления другой бизнес логики.
В REST существуют два метода для обновления PUT – полное обновление и PATCH – частичное. Мое решение поставленной задачи:
PATCH /todos
Обратите внимание, что я использую PATCH не к отдельному элементу, а к ресурсу коллекции. За этим запросом стоит такая логика: FE генерирует новый UUID как и при создание, а потом говорит BE скопируй контент из существующего todo.
Тело запроса представляет собой JSON Patch, который описывает как изменить JSON документ. По сути это набор операций которые необходимо произвести над JSON документом. Большинство Web API состоят из JSON документов, поэтому можем использовать готовый RFC. Одна строничная документация с операциями и определением JSON Pointer по ссылке http://jsonpatch.com/
#architecture
Для простоты примера рассмотрим Todo-list. Приходит задача добавить копирование одного todo элемента. Как вы ее спроектируете? Это реальный вопрос с собеседований.
Можно, переложить задачу на FE, чтобы он воспользовался существующим endpoint-ом для создания. Не удобно для массового копирования или добавления другой бизнес логики.
В REST существуют два метода для обновления PUT – полное обновление и PATCH – частичное. Мое решение поставленной задачи:
PATCH /todos
[{ "op": "copy", "from": "/todos/uuid", "path": "/todos/new-uuid" }]Обратите внимание, что я использую PATCH не к отдельному элементу, а к ресурсу коллекции. За этим запросом стоит такая логика: FE генерирует новый UUID как и при создание, а потом говорит BE скопируй контент из существующего todo.
Тело запроса представляет собой JSON Patch, который описывает как изменить JSON документ. По сути это набор операций которые необходимо произвести над JSON документом. Большинство Web API состоят из JSON документов, поэтому можем использовать готовый RFC. Одна строничная документация с операциями и определением JSON Pointer по ссылке http://jsonpatch.com/
NestJS. When patterns matters
#worth_seeing #nestjs
Сегодня у нас доклад с VinnytsiaJS 2017, которое можно назвать обзорным. 4 года назад я смотрел его, когда у Nest.js не было так подробно расписана документация, не было комьюнити. Для кого это тот доклад стал толчком к изучению всего Nest.js стэка.
Зрелость технологии определяется ее стабильностью. Может считать это видео подтверждением, что Nest.js стабилен и его стоит использовать.
#worth_seeing #nestjs
Сегодня у нас доклад с VinnytsiaJS 2017, которое можно назвать обзорным. 4 года назад я смотрел его, когда у Nest.js не было так подробно расписана документация, не было комьюнити. Для кого это тот доклад стал толчком к изучению всего Nest.js стэка.
Зрелость технологии определяется ее стабильностью. Может считать это видео подтверждением, что Nest.js стабилен и его стоит использовать.
YouTube
NestJS. When patterns matters - Ostap Chervak (VinnytsiaJS 2017)
VinnytsiaJS 2017 #VinnytsiaJS2017
http://vinnytsiajs.org/
https://www.facebook.com/VinnytsiaJS/
https://twitter.com/VinnytsiaJS
http://vinnytsiajs.org/
https://www.facebook.com/VinnytsiaJS/
https://twitter.com/VinnytsiaJS
VinnytsiaJS 2021
#conference
Винницкое JS комьюнити @vinjs проводит 21 августа оффлайн конференцию.
Формат традиционный для летних конференций – Open Air: бассейн, нетворкинг и JS доклады.
Я буду выступать на этой конференции с темой "Cloud Native Approach for Node.js Developers". Программа еще в стадии формирования, поэтому приглашаю коллег подать заявку на доклад.
#conference
Винницкое JS комьюнити @vinjs проводит 21 августа оффлайн конференцию.
Формат традиционный для летних конференций – Open Air: бассейн, нетворкинг и JS доклады.
Я буду выступать на этой конференции с темой "Cloud Native Approach for Node.js Developers". Программа еще в стадии формирования, поэтому приглашаю коллег подать заявку на доклад.
Cloud Native Landscape for Node.js Developers
#worth_seeing #cloud
При просмотре описания докладов на OpenJS World 2021 я подумал, что речь будет идти об Cloud Native Landscape. Это страница где собраны проекты участвующие в Cloud Native Foundation. Я ошибся. Докладчик делает обзор самого подхода, а не инструментов.
Slides
#worth_seeing #cloud
При просмотре описания докладов на OpenJS World 2021 я подумал, что речь будет идти об Cloud Native Landscape. Это страница где собраны проекты участвующие в Cloud Native Foundation. Я ошибся. Докладчик делает обзор самого подхода, а не инструментов.
Slides
YouTube
Cloud Native Landscape for Node.js Developers - Upkar Lidder, IBM
Cloud Native Landscape for Node.js Developers - Upkar Lidder, IBM
Get the lay of the Kubernetes land as a Node.js developer. Did you know there are more than 1500 projects listed on the CNCF landscape! It can be quickly get overwhelming if you haven’t developed…
Get the lay of the Kubernetes land as a Node.js developer. Did you know there are more than 1500 projects listed on the CNCF landscape! It can be quickly get overwhelming if you haven’t developed…
Какие подписки читать Node.js разработчику?
#list
Поделюсь списком моих email подписок:
JavaScript Weekly
Node Weekly
TypeScript Weekly
Web Tools Weekly
GraphQL Weekly
StackShare Weekly Digest
В подписках релизы инструментов, подборки статей и новости. У каждой есть архив, где можно понять качество контента.
Отдельно выделю Adventures in Nodeland by Matteo Collina как авторскую рассылку.
#list
Поделюсь списком моих email подписок:
JavaScript Weekly
Node Weekly
TypeScript Weekly
Web Tools Weekly
GraphQL Weekly
StackShare Weekly Digest
В подписках релизы инструментов, подборки статей и новости. У каждой есть архив, где можно понять качество контента.
Отдельно выделю Adventures in Nodeland by Matteo Collina как авторскую рассылку.
👍1
Как работает query в REST?
#architecture #nestjs
Вопрос с собеседований: "Чему равно id во время выполнения такого запроса:
Какой ответ дадите вы?
- будет ошибка, нельзя использовать два раза один параметр
- 1, потому что first win
- 2, потому что last win
- [1, 2]
В списке нет правильного ответа. Согласно спецификации это должен быть массив, но массив строк, а не чисел. Приведение типов это не часть парсинга строки.
Для передачи массива параметров в query есть такие варианты:
1️⃣
2️⃣
3️⃣
4️⃣
Какой способ выбрать зависит от того какой framework или библиотеку вы используете. Для #nodejs разработчики использующих express ближе всего будет 2-й способ. По умолчанию express используют extended query parser, то есть использует qs. Эта библиотека учитывает
#architecture #nestjs
Вопрос с собеседований: "Чему равно id во время выполнения такого запроса:
?id=1&id=2"Какой ответ дадите вы?
- будет ошибка, нельзя использовать два раза один параметр
- 1, потому что first win
- 2, потому что last win
- [1, 2]
В списке нет правильного ответа. Согласно спецификации это должен быть массив, но массив строк, а не чисел. Приведение типов это не часть парсинга строки.
Для передачи массива параметров в query есть такие варианты:
1️⃣
?foo=bar&foo=qux2️⃣
?foo[]=bar&foo[]=qux3️⃣
?foo%5B%5D=bar&foo%5B%5D=qux4️⃣
?foo=bar,quxКакой способ выбрать зависит от того какой framework или библиотеку вы используете. Для #nodejs разработчики использующих express ближе всего будет 2-й способ. По умолчанию express используют extended query parser, то есть использует qs. Эта библиотека учитывает
[] при парсинге.Помогите лучше понимать аудиторию канала.
Junior Software Engineer - 97
👍👍👍👍 20%
Software Engineer - 215
👍👍👍👍👍👍👍👍 44%
Senior Software Engineer - 110
👍👍👍👍👍 22%
Team/Technical Lead - 55
👍👍👍 11%
System Architect - 14
👍 3%
👥 491 человек уже проголосовал.
Junior Software Engineer - 97
👍👍👍👍 20%
Software Engineer - 215
👍👍👍👍👍👍👍👍 44%
Senior Software Engineer - 110
👍👍👍👍👍 22%
Team/Technical Lead - 55
👍👍👍 11%
System Architect - 14
👍 3%
👥 491 человек уже проголосовал.
Подборка node.recipes за июнь 2021
#monthly_list
Рецепты для #nodejs разработчиков:
➡️ Какие директивы есть в TypeScript и зачем их использовать?
➡️ Где брать сниппеты кода?
➡️ Обзор Node.js v16: Timers Promises API
➡️ Что должен знать Junior Node.js Developer?
➡️ На что влияет environment variable EDITOR?
➡️ Как работает ORM?
➡️ Что должен уметь написать Senior Node.js разработчик?
➡️ Что такое Custom URL Protocol Scheme?
➡️ Что такое Graceful Shutdown и как его реализовать?
➡️ Как тестировать Dockerfile?
➡️ Что такое timing attack (атака по времени)?
➡️ Что такое JSON Patch?
➡️ Какие подписки читать Node.js разработчику?
➡️ Как работает query в REST?
Обзор релизов:
🚀 Node.js 14.17.1
Freebies:
🤑 O'Reilly books
🤑 Redis University
Доклады, которые стоит посмотреть:
👀 Consuming Nodejs Observability Features in Kubernetes Environments
👀 Node.js middleware - никогда больше
👀 Observing Node.js: Using Metrics to Improve your Application Performance
👀 Demystifying Database Performance Issues with sqlcommenter
👀 Migration to Google Cloud or How to Train your Pet
👀 DDD, event sourcing and CQRS – theory and practice
👀 NestJS. When patterns matters
👀 Cloud Native Landscape for Node.js Developers
Voice Chats:
🎤 About Cloud Native, в гостях Николай Крещенко
🎤 About Metarhia and Node.js, в гостях Тимур Шемсединов
🎤 About Security, в гостях Анастасия Войтова
#monthly_list
Рецепты для #nodejs разработчиков:
➡️ Какие директивы есть в TypeScript и зачем их использовать?
➡️ Где брать сниппеты кода?
➡️ Обзор Node.js v16: Timers Promises API
➡️ Что должен знать Junior Node.js Developer?
➡️ На что влияет environment variable EDITOR?
➡️ Как работает ORM?
➡️ Что должен уметь написать Senior Node.js разработчик?
➡️ Что такое Custom URL Protocol Scheme?
➡️ Что такое Graceful Shutdown и как его реализовать?
➡️ Как тестировать Dockerfile?
➡️ Что такое timing attack (атака по времени)?
➡️ Что такое JSON Patch?
➡️ Какие подписки читать Node.js разработчику?
➡️ Как работает query в REST?
Обзор релизов:
🚀 Node.js 14.17.1
Freebies:
🤑 O'Reilly books
🤑 Redis University
Доклады, которые стоит посмотреть:
👀 Consuming Nodejs Observability Features in Kubernetes Environments
👀 Node.js middleware - никогда больше
👀 Observing Node.js: Using Metrics to Improve your Application Performance
👀 Demystifying Database Performance Issues with sqlcommenter
👀 Migration to Google Cloud or How to Train your Pet
👀 DDD, event sourcing and CQRS – theory and practice
👀 NestJS. When patterns matters
👀 Cloud Native Landscape for Node.js Developers
Voice Chats:
🎤 About Cloud Native, в гостях Николай Крещенко
🎤 About Metarhia and Node.js, в гостях Тимур Шемсединов
🎤 About Security, в гостях Анастасия Войтова
Закончил доклад в рамках @mathrandomcommunity:
Deep Dive Into NestJS
Кому нужны слайды, то они тут
Буду отвечать на ваши вопросы в комментариях как на ютубе, так и тут.
#nestjs
Deep Dive Into NestJS
Кому нужны слайды, то они тут
Буду отвечать на ваши вопросы в комментариях как на ютубе, так и тут.
#nestjs
YouTube
Deep Dive Into NestJS
NestJS is a framework with excellent documentation and a mature ecosystem. But during this talk, we will not retell its docs. We will go deeper.
The plan is:
- base packages,
- application lifecycle,
- request context and lifecycle,
- declarative code with…
The plan is:
- base packages,
- application lifecycle,
- request context and lifecycle,
- declarative code with…
👍1
Play it Right with CodeceptJS
#worth_seeing
Сегодня в рекомендациях видео по CodeceptJS. Это BDD фреймворк для создания end-to-end тестов на JavaScript. Докладчик автор фреймворка – Michael Bodnarchuk. Мне кажется недооцененной возможность писать тесты в BDD стиле, т.е. понятном для бизнеса языке. Надеюсь это видео поможет вам задуматься над вашими тестами.
#worth_seeing
Сегодня в рекомендациях видео по CodeceptJS. Это BDD фреймворк для создания end-to-end тестов на JavaScript. Докладчик автор фреймворка – Michael Bodnarchuk. Мне кажется недооцененной возможность писать тесты в BDD стиле, т.е. понятном для бизнеса языке. Надеюсь это видео поможет вам задуматься над вашими тестами.
YouTube
Play it Right with CodeceptJS: An Introduction to Supercharged E2E Testing – Michael Bodnarchuk
Get a GitNation Multipass, attend 8+ remote JavaScript conferences & watch tens of pro talks and workshops from our past events: https://portal.gitnation.org/multipass
🗓 TestJS Summit 2021 #TestJSSummit
Website – https://testjssummit.com/
Watch the…
🗓 TestJS Summit 2021 #TestJSSummit
Website – https://testjssummit.com/
Watch the…
Stream-oriented Architecture with Nest
#worth_seeing #nestjs
Докладчик – Kamil Myśliwiec, создатель Nest.js. В докладе идет речь не об #nodejs Streams, а об архитектуре реактивного приложения. Для людей ранее не работавших с реактивностью рекомендую посмотреть обзор RxJS.
В ходе доклада Камиль на пример игры сравнивает layered и stream-oriented архитектуры. Это позволяет лучше понять концепт.
Слайды
#worth_seeing #nestjs
Докладчик – Kamil Myśliwiec, создатель Nest.js. В докладе идет речь не об #nodejs Streams, а об архитектуре реактивного приложения. Для людей ранее не работавших с реактивностью рекомендую посмотреть обзор RxJS.
В ходе доклада Камиль на пример игры сравнивает layered и stream-oriented архитектуры. Это позволяет лучше понять концепт.
Слайды
YouTube
Taming reactive Node.js: Stream-oriented architecture with NestJS | Kamil Myśliwiec
accessible for deaf/hearing-impaired: sign language interpreter (DGS) visible for complete duration + captions // slide collection https://buff.ly/2YLcPlA // Licence: CC BY-ND https://buff.ly/2TN3XIo
The stream-oriented architectures are still very rare in…
The stream-oriented architectures are still very rare in…
TDD Conference
#conference
На следующих выходных будет бесплатная online конференция с амбициозным названием First International Test Driven Development (TDD) Conference. Организатором является Alex Bunardzic.
Полчаса назад я ничего не знал ни об этом человеке, ни об конференции. Сейчас я улучшаю тесты на основном проекте. Изучение материалов по TDD Manifesto привели меня на сайт конференции. Именно из-за одноименного доклада я на ней зарегистрировался, что предлагаю сделать и вам.
Видео: https://www.youtube.com/watch?v=-_noEVCR__I
#conference
На следующих выходных будет бесплатная online конференция с амбициозным названием First International Test Driven Development (TDD) Conference. Организатором является Alex Bunardzic.
Полчаса назад я ничего не знал ни об этом человеке, ни об конференции. Сейчас я улучшаю тесты на основном проекте. Изучение материалов по TDD Manifesto привели меня на сайт конференции. Именно из-за одноименного доклада я на ней зарегистрировался, что предлагаю сделать и вам.
Видео: https://www.youtube.com/watch?v=-_noEVCR__I
TDD Conference
First International Test Driven Development (TDD) Conference
Join the TDD Revolution!
Как использовать ARG и ENV внутри Dockerfile?
#docker
Сегодня обсудим две инструкции внутри Dockerfile: ARG и ENV.
TL;DR Используйте ARG для определения build-time переменных, а ENV – run-time. Используйте ENV=arg_var_name, чтобы создать образ с переменной определяемой в ходе сборки.
Инструкция ARG определяет build-time variables. Они доступны только во время сборки docker image во всех инструкциях включая FROM. Запущенный контейнер не могут получить к доступ к этим переменным. Это также относится к инструкциям CMD и ENTRYPOINT, которые определяют, что контейнер должен запускать по умолчанию. Если вы не указываете значение по умолчанию для ARG, то при сборке передача аргументов обязательна. Для этого используется
Переменные ENV также доступны во время сборки. Однако, в отличие от ARG, они доступны внутри запущенного контейнера. Значения ENV можно переопределить при запуске контейнера.
ENV и ARG можно комбинировать вместе.
Пример из реального проекта:
Внутри запущенного контейнера можно использовать переменные окружения PORT и VERSION
#docker
Сегодня обсудим две инструкции внутри Dockerfile: ARG и ENV.
TL;DR Используйте ARG для определения build-time переменных, а ENV – run-time. Используйте ENV=arg_var_name, чтобы создать образ с переменной определяемой в ходе сборки.
Инструкция ARG определяет build-time variables. Они доступны только во время сборки docker image во всех инструкциях включая FROM. Запущенный контейнер не могут получить к доступ к этим переменным. Это также относится к инструкциям CMD и ENTRYPOINT, которые определяют, что контейнер должен запускать по умолчанию. Если вы не указываете значение по умолчанию для ARG, то при сборке передача аргументов обязательна. Для этого используется
--build-arg. Пример:ARG some_variable_name# or with a hard-coded default:#ARG some_variable_name=worldRUN echo "Hello $some_variable_name"$ docker build --build-arg some_variable_name=a_valueПеременные ENV также доступны во время сборки. Однако, в отличие от ARG, они доступны внутри запущенного контейнера. Значения ENV можно переопределить при запуске контейнера.
ENV и ARG можно комбинировать вместе.
Пример из реального проекта:
FROM node:14.17.1-alpineARG VERSION=latestENV VERSION=$VERSIONENV PORT=8000WORKDIR /opt/app/COPY package.json package-lock.json /opt/app/RUN npm install --productionCOPY src /opt/app/EXPOSE $PORTENTRYPOINT ["node", "/opt/app/index.js"]Внутри запущенного контейнера можно использовать переменные окружения PORT и VERSION
boardgame.io движок для пошаговых игр
#tech_stack
Объект сегодняшнего обзор будет интересен как Junior, так и Senior уровню. Полгода назад я делал обзор игровых движков для реализации сервера для пошаговых игр. Моим фаворитом стал boardgame.io. Для реал-тайм игр он подойдет плохо, для таких игр я бы порекомендовал посмотреть colyseus.io.
Ключевые фичи:
- кодовая база на TypeScript
- готовые инструменты для дебагинга, визуализации и симуляции
- легкое подключение ботов
- расширение с помощью плагинов
- есть игровое лобби
Рекомендую посмотреть данный проект, если вы хотите сделать свой Pet проект в виде пошаговой игры.
#tech_stack
Объект сегодняшнего обзор будет интересен как Junior, так и Senior уровню. Полгода назад я делал обзор игровых движков для реализации сервера для пошаговых игр. Моим фаворитом стал boardgame.io. Для реал-тайм игр он подойдет плохо, для таких игр я бы порекомендовал посмотреть colyseus.io.
Ключевые фичи:
- кодовая база на TypeScript
- готовые инструменты для дебагинга, визуализации и симуляции
- легкое подключение ботов
- расширение с помощью плагинов
- есть игровое лобби
Рекомендую посмотреть данный проект, если вы хотите сделать свой Pet проект в виде пошаговой игры.
boardgame.io
Open Source Game Engine for Turn-Based Games
Что такое JSONPath?
#package #graphql
Работать с JSON в JavaScript крайне просто. Это подталкивает #nodejs разработчиков отдавать раздутые объекты из API. Упростить работу с такими объектами позволяет JSONPath. У него есть предшественик – Xpath, аналог для XML.
В синтаксисе всего десяток операторов. Чтобы их лучше понять, рекомендую перейти на JSONPath Online Evaluator и протестить разные выражения. Собственно вот синтаксис:
Базовые операторы – интуитивно понятны
Продвинутые операторы
Скриптовые операторы –
На уровне кода JSONPath полезен во время мутаций сложных JSON структур. Для этого используется одноименный пакет jsonpath. JSONPath встроен в Insomnia, API клиент для работы с GraphQL и REST. Поэтому многие QA выбирают его вместо Postman.
#package #graphql
Работать с JSON в JavaScript крайне просто. Это подталкивает #nodejs разработчиков отдавать раздутые объекты из API. Упростить работу с такими объектами позволяет JSONPath. У него есть предшественик – Xpath, аналог для XML.
В синтаксисе всего десяток операторов. Чтобы их лучше понять, рекомендую перейти на JSONPath Online Evaluator и протестить разные выражения. Собственно вот синтаксис:
Базовые операторы – интуитивно понятны
$ – корневой элемент@ – текущий элемент. или [] – дочерний элемент* – все элементыПродвинутые операторы
.. – так называемый рекурсивный спуск. Выбирает дочерние элементы на всех уровнях.[,] – union оператор[start:end:step] – slice операторСкриптовые операторы –
?() и () зависят от конкретного языка и библиотеки для работы с JSONPath.На уровне кода JSONPath полезен во время мутаций сложных JSON структур. Для этого используется одноименный пакет jsonpath. JSONPath встроен в Insomnia, API клиент для работы с GraphQL и REST. Поэтому многие QA выбирают его вместо Postman.
Refactoring: Second Edition
#worth_seeing
Мой ответ на этот вопрос – Мартин Фаулер. Он автор книги "Рефакторинг". В 2018 году он написал второе издание. В первом издание примеры кода были на Java, а во втором – на JavaScript.
Почему так вышло и как применять идеи из этой #must_read книги в сегодняшнем видео.
#worth_seeing
С кем из ныне живущих людей вы хотели бы провести час за беседой? Мой ответ на этот вопрос – Мартин Фаулер. Он автор книги "Рефакторинг". В 2018 году он написал второе издание. В первом издание примеры кода были на Java, а во втором – на JavaScript.
Почему так вышло и как применять идеи из этой #must_read книги в сегодняшнем видео.
YouTube
Refactoring: Second Edition – A Conversation with Martin Fowler
For more than 20 years, Martin Fowler's Refactoring has served as the definitive guide for those passionate about continually improving the design and maintainability of code.
This eagerly awaited update brings a fresh perspective. It has been fully updated…
This eagerly awaited update brings a fresh perspective. It has been fully updated…
Hello Quantum Developers World - Yet Another Frontier for JavaScript
#worth_seeing
Сегодня интро видео в квантовые вычисления. Для нас это новый инструмент. Он не востребован – на рынке нет подходящих типовых бизнес задач.
Почему стоит узнать об q-вычислениях:
- они уже доступны в облаках
- моделируют вероятностные события
- лучший кандидат на следующего техно-хайп, как это было с serverless и blockchain
Ссылка от докладчика: bit.ly/qcon-qjs
#worth_seeing
Сегодня интро видео в квантовые вычисления. Для нас это новый инструмент. Он не востребован – на рынке нет подходящих типовых бизнес задач.
Почему стоит узнать об q-вычислениях:
- они уже доступны в облаках
- моделируют вероятностные события
- лучший кандидат на следующего техно-хайп, как это было с serverless и blockchain
Ссылка от докладчика: bit.ly/qcon-qjs
YouTube
Hello Quantum Developers World - Yet Another Frontier for JavaScript
Video with trannoscript included: https://bit.ly/3dLm0sf
Miguel Ramalho talks about the underlying principles of Quantum Computing and how it differs from Classical Computing, how and why it is evolving so fast and how to take it from the hands of researchers…
Miguel Ramalho talks about the underlying principles of Quantum Computing and how it differs from Classical Computing, how and why it is evolving so fast and how to take it from the hands of researchers…
Any problem must be solved at the right level
#principles
В роли консультанта моя работа это задавать правильные вопросы. Самый информативный: "Почему данный функционал реализован на этом уровне?". Поделюсь субъективным разделением уровней.
1️⃣ Уровень бизнес-кода. Реализуется сервисами, моделями, репозиториями, миграциями, шаблонами и т.п. Создает всю бизнес логику, в том числе ее представление на уровне данных. Не может быть перенесен между проектам. Имеет особую коммерческую ценность и защищается NDA.
2️⃣ Уровень кода-приложения. Реализуется контролерами, валидаторами, роутерами, обработчиками ошибок, логгерами и т.д. По сути это код использующий методы фреймворка для вызова бизнес-логики.
3️⃣ Уровень кода-фреймворка. Реализуется набором библиотек и паттернов, с помощью которых команда создает проект. При правильной реализация, этот код может быть переиспользован между проектами. При идеальной реализации: это open-source, качественная тех. документация, 100% покрытие тестами. Именно здесь чаще всего происходит техническая инфляция.
4️⃣ Уровень сервисов и инфраструктуры. Реализуется сторонними API, очередями, базами данных, лоад балансерами, автоскейлерами и т.д. Команда разработки отвечает за выбор и конфигурация, но не за реализацию. Чем больше технических и бизнес задач решено на данном уровне, тем лучше для бизнеса.
5️⃣ Уровень команд и процессов. Реализуется договоренностями между людьми. Отражается прямым образом в архитектуре. Тут важны здравый смысл, дисциплина и умение понять других.
Чем эта философия может быть полезна для #nodejs разработчика? Чтобы определить свое профессиональное развитие! Понимайте где вы хотите находиться. Например, Тимур Шемсединов не любит заниматься прикладным программирование (1️⃣+2️⃣), ему интересно системное программирование(3️⃣+4️⃣)
#principles
В роли консультанта моя работа это задавать правильные вопросы. Самый информативный: "Почему данный функционал реализован на этом уровне?". Поделюсь субъективным разделением уровней.
1️⃣ Уровень бизнес-кода. Реализуется сервисами, моделями, репозиториями, миграциями, шаблонами и т.п. Создает всю бизнес логику, в том числе ее представление на уровне данных. Не может быть перенесен между проектам. Имеет особую коммерческую ценность и защищается NDA.
2️⃣ Уровень кода-приложения. Реализуется контролерами, валидаторами, роутерами, обработчиками ошибок, логгерами и т.д. По сути это код использующий методы фреймворка для вызова бизнес-логики.
3️⃣ Уровень кода-фреймворка. Реализуется набором библиотек и паттернов, с помощью которых команда создает проект. При правильной реализация, этот код может быть переиспользован между проектами. При идеальной реализации: это open-source, качественная тех. документация, 100% покрытие тестами. Именно здесь чаще всего происходит техническая инфляция.
4️⃣ Уровень сервисов и инфраструктуры. Реализуется сторонними API, очередями, базами данных, лоад балансерами, автоскейлерами и т.д. Команда разработки отвечает за выбор и конфигурация, но не за реализацию. Чем больше технических и бизнес задач решено на данном уровне, тем лучше для бизнеса.
5️⃣ Уровень команд и процессов. Реализуется договоренностями между людьми. Отражается прямым образом в архитектуре. Тут важны здравый смысл, дисциплина и умение понять других.
Чем эта философия может быть полезна для #nodejs разработчика? Чтобы определить свое профессиональное развитие! Понимайте где вы хотите находиться. Например, Тимур Шемсединов не любит заниматься прикладным программирование (1️⃣+2️⃣), ему интересно системное программирование(3️⃣+4️⃣)
Как и зачем обновить aws-sdk с v2 на v3?
#package #aws
Два месяца назад я рассказывал как Как уменьшить потребление памяти во время TypeScript компиляции? Там я привел в качестве примера изменения импортов из
Вторая версия по-прежнему поддерживается, но переходить на третью уже пора. Вот причины:
➡️ модульная архитектура, т.е. один пакет для работы с одним сервисом. Можно не следить за правильностью import-ов как в примере.
➡️ TypeScript-first поддержка
➡️ короче Stack Trace для ошибок
➡️ оплата технической инфляции раньше ее превращения в тех.долг
Перед обновлением можно рекомендую глянуть workshop v2->v3 для самостоятельного прохождения от AWS.
#package #aws
Два месяца назад я рассказывал как Как уменьшить потребление памяти во время TypeScript компиляции? Там я привел в качестве примера изменения импортов из
aws-sdk. Этот пакет является второй версией AWS JS SDK. Я упустил выход третей версии в декабре прошлого года. Третья версия состоит из scoped packages с префиксом @aws-sdk, например @aws-sdk/client-s3.Вторая версия по-прежнему поддерживается, но переходить на третью уже пора. Вот причины:
➡️ модульная архитектура, т.е. один пакет для работы с одним сервисом. Можно не следить за правильностью import-ов как в примере.
➡️ TypeScript-first поддержка
➡️ короче Stack Trace для ошибок
➡️ оплата технической инфляции раньше ее превращения в тех.долг
Перед обновлением можно рекомендую глянуть workshop v2->v3 для самостоятельного прохождения от AWS.