How to model application flows in React with finite state machines and XState
Пошаговый пример проектирования небольшой страницы с помощью XState
https://engineering.kablamo.com.au/posts/2021/finite-state-machines-and-xstate
#link #frontend #web-development #xstate #react #javascipt
Пошаговый пример проектирования небольшой страницы с помощью XState
https://engineering.kablamo.com.au/posts/2021/finite-state-machines-and-xstate
#link #frontend #web-development #xstate #react #javascipt
Insights from Kablamo Engineering.
How to model application flows in React with finite state machines and XState
Application state in front-end clients is a complexity that is at best managed, and at worst the reason you can't deliver new features. What if you could know every state your app could be in and ensure that it can only be in those states?
Frontend development. How to use finite state machines in React?
Еще одна статья про проектирование маленьгого react приложения вместе с xstate
https://tsh.io/blog/finite-state-machines-in-react
#xstate #react #javascipt #web-development #frontend
Еще одна статья про проектирование маленьгого react приложения вместе с xstate
https://tsh.io/blog/finite-state-machines-in-react
#xstate #react #javascipt #web-development #frontend
The Software House
How to use finite state machines in React?
Finite state machines in React? I know, it sounds crazy. But if you introduce state machines in frontend development they will work miracles for your project.
17 причин не использовать чаты в работе, перевод статьи основателя Basecamp — Офис на
Статья про то, как чаты, из идеи асинхронного общения превратились плохое синхронное общение.
Также указаны принципы хорошего асинхронного общения. Но ни слова о том, как перестать делать плохо и начать делать хорошо
https://vc.ru/office/275508-17-prichin-ne-ispolzovat-chaty-v-rabote-perevod-stati-osnovatelya-basecamp
#communication
Статья про то, как чаты, из идеи асинхронного общения превратились плохое синхронное общение.
Также указаны принципы хорошего асинхронного общения. Но ни слова о том, как перестать делать плохо и начать делать хорошо
https://vc.ru/office/275508-17-prichin-ne-ispolzovat-chaty-v-rabote-perevod-stati-osnovatelya-basecamp
#communication
vc.ru
17 причин не использовать чаты в работе, перевод статьи основателя Basecamp — Офис на vc.ru
Краткая справка про ребят из Basecamp — с 2006 года делают софт для ведения проектов и удаленных команд, первые на рынке рабочих чатов. Раньше вели блог Signal vs. Noise, где много интересных статей. Джейсон Фрид, основатель, написал две книги — Remote и…
Patterns of Legacy Displacement
Паттеры для замены легаси на что-то новое.
Сам процесс замены можно разбить на следующие состоявляющие:
- Понять, чего хотим достичь
- Разбить проблему на мелкие части
- Успешно заделиверить эти части
- Изменить организацию так, чтобы новое решение не превратилось в новое легаси
В статье рассказывается об анти-паттернах переписывания легаси:
- переписывание всего разом
- переписывание потому что "новая технология"
- переписывание без понимания, чего хотим достичь
- переделывавние технической части или бизнесовой изолированно друг от друга
В целом для хорошей замены легаси компонента на новвый, нужно
- уметь в архитектуру
- быть agile
- понимать зачем это бизнесу
- менять не только саму систему, но и все процессы и организацию вокруг системы
Обязательно к прочтению всем, кто хочет менять легаси
https://martinfowler.com/articles/patterns-legacy-displacement
#martin-fowler #refactoring #legacy
Паттеры для замены легаси на что-то новое.
Сам процесс замены можно разбить на следующие состоявляющие:
- Понять, чего хотим достичь
- Разбить проблему на мелкие части
- Успешно заделиверить эти части
- Изменить организацию так, чтобы новое решение не превратилось в новое легаси
В статье рассказывается об анти-паттернах переписывания легаси:
- переписывание всего разом
- переписывание потому что "новая технология"
- переписывание без понимания, чего хотим достичь
- переделывавние технической части или бизнесовой изолированно друг от друга
В целом для хорошей замены легаси компонента на новвый, нужно
- уметь в архитектуру
- быть agile
- понимать зачем это бизнесу
- менять не только саму систему, но и все процессы и организацию вокруг системы
Обязательно к прочтению всем, кто хочет менять легаси
https://martinfowler.com/articles/patterns-legacy-displacement
#martin-fowler #refactoring #legacy
martinfowler.com
Patterns of Legacy Displacement
Patterns for the effective modernization of legacy software systems
Ускоряем код на JS и других языках: подборка приёмов от разработчика поиска Яндекса
Команда поиска Яндекс внимательно следит за производительностью своего поиска. Поиск яндекса - пример бизнеса, в котором производительность критична.
У команды поиска уже были хорошие доклады про то, как они следят за перформансом своего приложения.
Теперь же они оформили свой опыт оптимизации исполнения кода в виде статьи на хабре.
https://habr.com/ru/company/yandex/blog/570914
#web-development #frontend #yandex #habr #performance
Команда поиска Яндекс внимательно следит за производительностью своего поиска. Поиск яндекса - пример бизнеса, в котором производительность критична.
У команды поиска уже были хорошие доклады про то, как они следят за перформансом своего приложения.
Теперь же они оформили свой опыт оптимизации исполнения кода в виде статьи на хабре.
https://habr.com/ru/company/yandex/blog/570914
#web-development #frontend #yandex #habr #performance
Хабр
Приёмы ускорения кода на JS и других языках: подборка от разработчика поиска Яндекса
Привет! Меня зовут Виктор Хомяков, в Яндексе я работаю над скоростью страниц поиска. Однажды мне в голову пришла идея обобщить свой опыт и систематизировать приёмы ускорения работы кода на JavaScript....
GitHub - vultix/ts-results: A typescript implementation of Rust's Result object.
Имплементация обьекта Result из Rust на typescript. Result очень похож на монаду Maybe (если я правильно помню эту монаду) - может содержать или результат или ошибку, но перед тем как работать с результатом нужно проверить, содержится ли в Result ошибка или результат.
Выглядит интересно.
https://github.com/vultix/ts-results
#link #typescript #library #github #web-development #frontend
Имплементация обьекта Result из Rust на typescript. Result очень похож на монаду Maybe (если я правильно помню эту монаду) - может содержать или результат или ошибку, но перед тем как работать с результатом нужно проверить, содержится ли в Result ошибка или результат.
Выглядит интересно.
https://github.com/vultix/ts-results
#link #typescript #library #github #web-development #frontend
GitHub
GitHub - vultix/ts-results: A typescript implementation of Rust's Result object.
A typescript implementation of Rust's Result object. - vultix/ts-results
WebDriver BiDi - The future of cross-browser automation
Сначала на свет появился Selenium, позволивший автоматизировать тестирование в браузерах с использованием протокола WebDriver. Этот протокол стандартизирован W3C и именно благодаря ему с помощью Selenium возможно тестировать почти все браузеры.
Затем на свет вышел Chrome Devtools Protocol (CDP) и puppeteer. Он, обьективно говоря, удобнее всем. Кроме одного факта - работает только с chromium based браузерами. Текущие самые популярные платформы для написания браузерных тестов - cypress и puppeteer, работают на CDP.
Чуть позже Microsoft анонсировала playwright. Инструмент имеет апи как у puppeteer, но умеет автоматизировать safari и firefox (если не ошибаюсь).
А теперь комитет W3C стандартизирует WebDriver-BiDi - который должен взять плюсы CDP, но убрать из них специфику хрома и стать единым новым протоколом для общения с браузерами.
https://developer.chrome.com/blog/webdriver-bidi
#testing #web-development
Сначала на свет появился Selenium, позволивший автоматизировать тестирование в браузерах с использованием протокола WebDriver. Этот протокол стандартизирован W3C и именно благодаря ему с помощью Selenium возможно тестировать почти все браузеры.
Затем на свет вышел Chrome Devtools Protocol (CDP) и puppeteer. Он, обьективно говоря, удобнее всем. Кроме одного факта - работает только с chromium based браузерами. Текущие самые популярные платформы для написания браузерных тестов - cypress и puppeteer, работают на CDP.
Чуть позже Microsoft анонсировала playwright. Инструмент имеет апи как у puppeteer, но умеет автоматизировать safari и firefox (если не ошибаюсь).
А теперь комитет W3C стандартизирует WebDriver-BiDi - который должен взять плюсы CDP, но убрать из них специфику хрома и стать единым новым протоколом для общения с браузерами.
https://developer.chrome.com/blog/webdriver-bidi
#testing #web-development
Chrome for Developers
WebDriver BiDi - The future of cross-browser automation | Blog | Chrome for Developers
Getting to know what is WebDriver BiDi and why it is the future of cross-browser automation
TypeScript: Unexpected intersections
У вас есть 2 обьекта одного типа Type.
type Type = {
a: string,
b: number
}
Функция принимает параметр key типа keyof Type и перебрасывает из одного обьекта значение key в другой обьект.
function fn(key: keyof Type) {
obj1key = obj2key
}
В этом случае Typescript будет думать, будто-бы мы ЛЮБОЙ ключ obj2 кидаем в ЛЮБОЙ ДРУГОЙ ключ obj1. Т.е. rак будто пытаемся записать string | number либо в поле с типом string, либо в поле с типом number. Typescript кинет ошибку т.к. ему нужно доказать что мы правильно перезаписываем поля.
Такое поведение неочевидно, потому что для разработчика ожидаемое поведение другое. Из кода понятно, что мы не можем тут записать неправильный тип данных.
Решение для этой проблемы, а также пара других похожих проблем можно прочитать в статье.
https://fettblog.eu/typescript-unexpected-intersections
#typescript #frontend #web-development
У вас есть 2 обьекта одного типа Type.
type Type = {
a: string,
b: number
}
Функция принимает параметр key типа keyof Type и перебрасывает из одного обьекта значение key в другой обьект.
function fn(key: keyof Type) {
obj1key = obj2key
}
В этом случае Typescript будет думать, будто-бы мы ЛЮБОЙ ключ obj2 кидаем в ЛЮБОЙ ДРУГОЙ ключ obj1. Т.е. rак будто пытаемся записать string | number либо в поле с типом string, либо в поле с типом number. Typescript кинет ошибку т.к. ему нужно доказать что мы правильно перезаписываем поля.
Такое поведение неочевидно, потому что для разработчика ожидаемое поведение другое. Из кода понятно, что мы не можем тут записать неправильный тип данных.
Решение для этой проблемы, а также пара других похожих проблем можно прочитать в статье.
https://fettblog.eu/typescript-unexpected-intersections
#typescript #frontend #web-development
fettblog.eu
TypeScript: Unexpected intersections
Sometimes when writing TypeScript, some of the things you’d usually do in JavaScript work a little different and cause some weird, and puzzling situations. Sometimes you just want to assign a value to an object property and get a weird error like “Type ‘string…
Heuristics for Effective Software Development: A continuously evolving list
Эвристики эффективной разработки.
Очередной манифест с лозунгами. Но в целом все верно.
https://holub.com/heuristics-for-effective-software-development-a-continuously-evolving-list
#development
Эвристики эффективной разработки.
Очередной манифест с лозунгами. Но в целом все верно.
https://holub.com/heuristics-for-effective-software-development-a-continuously-evolving-list
#development
Allen Holub
Heuristics for Effective Software Development Organizations: A continuously evolving list.* | Allen Holub
Without psychological safety, respect, and trust, none of the following is possible. The way we work, the work we do, and the organizations within which we work are all part of a connected system. You cannot change anything without changing everything. You…
The Problem with Prioritization Frameworks
Есть несколько популярных фреймворков для приоритезации задач.
- ICE/RICE scoring (reach, impact, confidence, effort)
- Value vs complexity 2X2 matrix
- Stakeholder scoring
Все они примерно одинаковы, нужно дать оценку идеям по трем пунктам:
- Сколько это принесет денег
- Как сложно это сделать
Вопросов может быть больше или они могут быть поставлены по другому, но в целом они сводятся к этим двум оценкам.
Эти фреймворки не работают, потому что их результаты очень неточны. Они хорошо выделяют задачи которые легко сделать и приносят много ценности и которые сложно сделать и не приносят ценности. Но такие задачи легко видны и без применения фреймворков приоритезации.
Решение проблемы приоритезации в другом: продуктовая команда должна сфокусироваться на меньшем количестве задач, но на таких, в которые верит вся продуктовая команда.
Не смотря на то, что эти фреймворки не помогают с приоритезацией, они могут помочь в другом. Эти фреймворки хорошо визуализируют, почему некоторые запросы стейкхолдеров не следует брать в работу. В этом случае эти фреймворки выполняются роль платформы для обсуждения.
Есть и другие методы приоритезации:
- Kano model
- Opportunity scoring
- Buy-a-feature method
Они работают лучше, но по-другому и имеют свои проблемы
https://jefago.com/product-management/why-prioritization-frameworks-dont-work
#link #managment #agile #prioritization
Есть несколько популярных фреймворков для приоритезации задач.
- ICE/RICE scoring (reach, impact, confidence, effort)
- Value vs complexity 2X2 matrix
- Stakeholder scoring
Все они примерно одинаковы, нужно дать оценку идеям по трем пунктам:
- Сколько это принесет денег
- Как сложно это сделать
Вопросов может быть больше или они могут быть поставлены по другому, но в целом они сводятся к этим двум оценкам.
Эти фреймворки не работают, потому что их результаты очень неточны. Они хорошо выделяют задачи которые легко сделать и приносят много ценности и которые сложно сделать и не приносят ценности. Но такие задачи легко видны и без применения фреймворков приоритезации.
Решение проблемы приоритезации в другом: продуктовая команда должна сфокусироваться на меньшем количестве задач, но на таких, в которые верит вся продуктовая команда.
Не смотря на то, что эти фреймворки не помогают с приоритезацией, они могут помочь в другом. Эти фреймворки хорошо визуализируют, почему некоторые запросы стейкхолдеров не следует брать в работу. В этом случае эти фреймворки выполняются роль платформы для обсуждения.
Есть и другие методы приоритезации:
- Kano model
- Opportunity scoring
- Buy-a-feature method
Они работают лучше, но по-другому и имеют свои проблемы
https://jefago.com/product-management/why-prioritization-frameworks-dont-work
#link #managment #agile #prioritization
Jefago
The Problem with Prioritization Frameworks
Prioritizing is difficult for many product managers, so they turn to prioritization frameworks. However, they solve the wrong problem, and they solve it badly.
GitHub’s Journey From Monolith to Microservices
Github вырос в 2 раза за полтора года. GitHub стал достаточно большим, чтобы ощущать неудобство от монолита:
- можно случайно все сломать
- большой кусок кода
- все разработчики завязаны на 1 стек
Поэтому было принято решение понемногу вводить микросервисы. В статье описаны проблемы, с которыми столкнулись в GitHub. И их решения.
В статье вы не увидите ничего нового, если вы уже мастер микросервисов. П
https://infoq.com/articles/github-monolith-microservices
#github #microservices #web-development
Github вырос в 2 раза за полтора года. GitHub стал достаточно большим, чтобы ощущать неудобство от монолита:
- можно случайно все сломать
- большой кусок кода
- все разработчики завязаны на 1 стек
Поэтому было принято решение понемногу вводить микросервисы. В статье описаны проблемы, с которыми столкнулись в GitHub. И их решения.
В статье вы не увидите ничего нового, если вы уже мастер микросервисов. П
https://infoq.com/articles/github-monolith-microservices
#github #microservices #web-development
InfoQ
GitHub’s Journey from Monolith to Microservices
This article explores GitHub's recent journey towards a microservices architecture. It takes a deeper look at GitHub’s historical and current state, goes over some internal and external factors, and discusses practical consideration points in how Github tackled…
How open source beat agile
GitHub запустился в 2008 году и очень быстро стал популярным. В том числе популяризировалась и модель Pull Request + Code Review.
В 2010 году была опубликована книга Continuous Delivery, в рамках которой предлагается коммитить сразу в мастер и не рекомендуется делать долго-живущие фиче-ветки.
Эта два совершенно разных подхода, которые подходят разным контекстам. Подход GitHub'а подходит open-source проектам, потому что:
- В проекты в GitHub'е нельзя просто так комитить в мастер
- Нет четкого заказчика
Подход Continious Delivery больше подходит agile проектам, где все разработчики могут комитить сразу в мастер и есть четкий заказчик.
Эти два подхода конфликтуют.
Почему же в коммерческой разработке все используют подход, который больше подходит для open source проектов? А именно, почему практически все разрабатывают с помощью Pull Request и Code Review?
Автор статьи связывает это с тем, что процесс разработки как в Open Source более прозрачен. Разработчики во время Code Review видят практики, которые применяют другие разработчики. В то время как при применении Continous Delivery сложно увидеть практики, применяемые другими разработчиками.
От себя добавлю, что инструментов, позволяющих проводить Code Review на Pull Request'ах - достаточно много. В то же время инструментов, позволяющих делать удобный Continious Code Review на мастере - нет совсем
https://surfingcomplexity.blog/2017/01/21/how-open-source-beat-agile
#agile #development #code-review
GitHub запустился в 2008 году и очень быстро стал популярным. В том числе популяризировалась и модель Pull Request + Code Review.
В 2010 году была опубликована книга Continuous Delivery, в рамках которой предлагается коммитить сразу в мастер и не рекомендуется делать долго-живущие фиче-ветки.
Эта два совершенно разных подхода, которые подходят разным контекстам. Подход GitHub'а подходит open-source проектам, потому что:
- В проекты в GitHub'е нельзя просто так комитить в мастер
- Нет четкого заказчика
Подход Continious Delivery больше подходит agile проектам, где все разработчики могут комитить сразу в мастер и есть четкий заказчик.
Эти два подхода конфликтуют.
Почему же в коммерческой разработке все используют подход, который больше подходит для open source проектов? А именно, почему практически все разрабатывают с помощью Pull Request и Code Review?
Автор статьи связывает это с тем, что процесс разработки как в Open Source более прозрачен. Разработчики во время Code Review видят практики, которые применяют другие разработчики. В то время как при применении Continous Delivery сложно увидеть практики, применяемые другими разработчиками.
От себя добавлю, что инструментов, позволяющих проводить Code Review на Pull Request'ах - достаточно много. В то же время инструментов, позволяющих делать удобный Continious Code Review на мастере - нет совсем
https://surfingcomplexity.blog/2017/01/21/how-open-source-beat-agile
#agile #development #code-review
Surfing Complexity
How open source beat agile
How does code land in your master branch? Do your team members commit directly to master, or do you merge in pull requests? In 2008, the repository hosting company known as GitHub was founded. GitH…
Prefer Declarative State Updaters
Статья про антипаттерн, когда чаилд-компонент работает с передаваемым ему апи, зная его реализацию
В частности, когда в чаилд компонент передаётся setState от родителя
Из минусов статьи - аргументация. Это плохо потому что это плохо и вообще не надо так.
https://kyleshevlin.com/prefer-declarative-state-updaters?ck\_subscriber\_id=887769274
#link #react #frontend #javascript #web-development
Статья про антипаттерн, когда чаилд-компонент работает с передаваемым ему апи, зная его реализацию
В частности, когда в чаилд компонент передаётся setState от родителя
Из минусов статьи - аргументация. Это плохо потому что это плохо и вообще не надо так.
https://kyleshevlin.com/prefer-declarative-state-updaters?ck\_subscriber\_id=887769274
#link #react #frontend #javascript #web-development
Kyleshevlin
Prefer Declarative State Updaters
Learn how declarative state updaters improve the quality of your component's code.
How To Write Readable React Content States
Практически для любого контента нам нужно уметь показывать 4 состояния:
- ожидание
- загрузка данных
- ошибка загрузки
- успешная загрузка
В статье рассматриваются два способа реализации этих состояний в react компоненте.
По сути это:
- условия в разметке
- отдельные компоненты
Оба способа имеют свои плюсы и минусы и подходят в разных контекстах
https://www.chakshunyu.com/blog/how-to-write-readable-react-content-states/
#link #react #javascript #web-development #frontend
Практически для любого контента нам нужно уметь показывать 4 состояния:
- ожидание
- загрузка данных
- ошибка загрузки
- успешная загрузка
В статье рассматриваются два способа реализации этих состояний в react компоненте.
По сути это:
- условия в разметке
- отдельные компоненты
Оба способа имеют свои плюсы и минусы и подходят в разных контекстах
https://www.chakshunyu.com/blog/how-to-write-readable-react-content-states/
#link #react #javascript #web-development #frontend
Chakshunyu
How To Write Readable React Content States
Content streams are an important part of any React project, but also introduces a lot of complexity. Long term, making sure that the code is readable has a serious impact on the maintainability. This article will cover and analyze the readability of two fundamental…
testjavascript/nodejs-integration-tests-best-practices
40 бест практисов для интеграционного тестирования сервисов на nodejs. Многие советы никак не привязаны к технологическому стеку
https://github.com/testjavascript/nodejs-integration-tests-best-practices
#link #node #testing #frontend #backend #web-development
40 бест практисов для интеграционного тестирования сервисов на nodejs. Многие советы никак не привязаны к технологическому стеку
https://github.com/testjavascript/nodejs-integration-tests-best-practices
#link #node #testing #frontend #backend #web-development
GitHub
GitHub - testjavascript/nodejs-integration-tests-best-practices: ✅ Beyond the basics of Node.js testing. Including a super-comprehensive…
✅ Beyond the basics of Node.js testing. Including a super-comprehensive best practices list and an example app (March 2024) - testjavascript/nodejs-integration-tests-best-practices
Team meeting audit: 3 tests for an effective Meeting OS (and 4 steps to fix it!) · 5. Action plan for our Meeting OS
Для эффективной командной работы нужны митинги. Без них коммуникации могут быть плохими, что плохо сказывается на эффективности процесса.
Но что если и сами митинги неэффективны? Как понять, приносят они пользу или больше вредят?
В статье описан готовый фреймворк по анализу митингов в команде и как сделать их эффективнее
https://coda.io/@shishir/team-meeting-audit/5-action-plan-for-our-meeting-os-65
#link #meetings
Для эффективной командной работы нужны митинги. Без них коммуникации могут быть плохими, что плохо сказывается на эффективности процесса.
Но что если и сами митинги неэффективны? Как понять, приносят они пользу или больше вредят?
В статье описан готовый фреймворк по анализу митингов в команде и как сделать их эффективнее
https://coda.io/@shishir/team-meeting-audit/5-action-plan-for-our-meeting-os-65
#link #meetings
Coda
5. Action plan for our Meeting OS · Team meeting audit: 3 tests for an effective Meeting OS (and 4 steps to fix it!)
A summary of the ideas and action items to improve our team meetings.
A Journey in Test Engineering Leadership: Applying Session-Based Test Management
Статья про Session-Based Test Management.
Метод был описан еще в нулевых. Если коротко, то метод предлагает ставить процесс тестирования примерно так:
- Лид группы определяет стратегию и план тестирования
- Тестировщики тестируют
- В конце тестирования создается отчет, в котором, в том числе, указываются сколько времени ушло на само тестирование, сколько на поиск багов и сколько на административную рутину
- После этого мы можем анализировать, как бы улучшить процесс тестирования
На мой взгляд достаточно бюрократизированная схема, но она хотя бы имеет цикл обратной связи. И кажется она подходит для бучения джунов-тестеров.
https://infoq.com/articles/session-based-test-management
#testing #development
Статья про Session-Based Test Management.
Метод был описан еще в нулевых. Если коротко, то метод предлагает ставить процесс тестирования примерно так:
- Лид группы определяет стратегию и план тестирования
- Тестировщики тестируют
- В конце тестирования создается отчет, в котором, в том числе, указываются сколько времени ушло на само тестирование, сколько на поиск багов и сколько на административную рутину
- После этого мы можем анализировать, как бы улучшить процесс тестирования
На мой взгляд достаточно бюрократизированная схема, но она хотя бы имеет цикл обратной связи. И кажется она подходит для бучения джунов-тестеров.
https://infoq.com/articles/session-based-test-management
#testing #development
InfoQ
A Journey in Test Engineering Leadership: Applying Session-Based Test Management
This article shows how modifying Session-based Test Management to our context helped us gain more visibility into our testing. Having a structured yet flexible approach to test management allowed us to make better, more timely decisions about the testing…
Better coordination, or better software?
Предположим у вас много разных сервисов, которые связаны друг с другом. И есть разные команды эти сервисы развивающие.
В такой системе нужно много синхронизаций - задачи могут влиять на несколько сервисов разом. И за этим нужно следить.
Решение для данной проблемы: уменьшить связность сервисов через построение явной жесткой архитектурной границы и внедрение явных портов и адаптеров.
В таком случае количество каналов коммуникаций снизится и всем будет легче. А система станет гибче.
https://jessitron.com/2021/08/02/better-coordination-or-better-software
#architecture #development #agile
Предположим у вас много разных сервисов, которые связаны друг с другом. И есть разные команды эти сервисы развивающие.
В такой системе нужно много синхронизаций - задачи могут влиять на несколько сервисов разом. И за этим нужно следить.
Решение для данной проблемы: уменьшить связность сервисов через построение явной жесткой архитектурной границы и внедрение явных портов и адаптеров.
В таком случае количество каналов коммуникаций снизится и всем будет легче. А система станет гибче.
https://jessitron.com/2021/08/02/better-coordination-or-better-software
#architecture #development #agile
Jessitron
Better coordination, or better software?
TL;DR: When different parts of an organization need to coordinate, it seems like a good idea to help them coordinate smoothly and frequently. Don’t. Help them coordinate less — more exp…
Consistency, Coupling, and Complexity at the Edge
Какую организацию API выбрать для проекта: RestAPI или GraphQL?
Rest API удобен для использования в сервисах и проектирования сервисов. Но не удобен для GUI т.к. REST предполагает разделение сущностей на отдельные ендпоинты, а в GUI мы хотим видеть все и сразу.
GraphQL удобен для GUI за счет того, что можно просто описать, что нужно показать, а там оно уже само разберется. Но это неудобно для сервисов.
Но почему нам стоит выбирать между REST и GraphQL? Почему не взять лучшее из обоих.
Если REST подходит для проектирования сервисов и использования в сервисах то давайте его там и использовать.
Если GraphQL удобен для GUI то давайте его использовать для конечных приложений (web, ios, android, etc).
Мы можем последовать Separation of Concerns принципу и использовать те инструменты, которые лучше подходят контексту.
Мы можем проектировать внутренние сервисы на REST, но делать отдельные bff для приложений, которые внутри уже используют то, что удобно им. Например, GraphQL.
https://infoq.com/articles/consistency-coupling-complexity
#architecture #graphql #rest #bff
Какую организацию API выбрать для проекта: RestAPI или GraphQL?
Rest API удобен для использования в сервисах и проектирования сервисов. Но не удобен для GUI т.к. REST предполагает разделение сущностей на отдельные ендпоинты, а в GUI мы хотим видеть все и сразу.
GraphQL удобен для GUI за счет того, что можно просто описать, что нужно показать, а там оно уже само разберется. Но это неудобно для сервисов.
Но почему нам стоит выбирать между REST и GraphQL? Почему не взять лучшее из обоих.
Если REST подходит для проектирования сервисов и использования в сервисах то давайте его там и использовать.
Если GraphQL удобен для GUI то давайте его использовать для конечных приложений (web, ios, android, etc).
Мы можем последовать Separation of Concerns принципу и использовать те инструменты, которые лучше подходят контексту.
Мы можем проектировать внутренние сервисы на REST, но делать отдельные bff для приложений, которые внутри уже используют то, что удобно им. Например, GraphQL.
https://infoq.com/articles/consistency-coupling-complexity
#architecture #graphql #rest #bff
InfoQ
Consistency, Coupling, and Complexity at the Edge
Successful use of a microservices architecture requires maintaining a clear separation of concerns in the various layers and by employing design principles best suited to each layer. While RESTful API design has become the standard for microservices, it can…
Improving Testability: Removing Anti-Patterns through Joint Conversations
Любой код можно протестировать. Вопрос только в усилиях, которые необходимо затратить на тестирование кода.
Как улучшить тестируемость системы? Н простых шагов:
- Определить анти-паттерны, которые мешают тестировать код
- Осознать, что тестирумость приложения важна, в том числе разработчикам
- Осознать, что если автотесты пишут тестировщики и они подключаются после разработки - вносить изменения будет сложно
- Проводить ретроспективы - почему что-то было сложно протестировать и как это исправить, а что было легко протестировать и как это закрепить
- Думать о тестировании на шаге проектирования системы. Обсуждать архитектуру решения вместе с тестировщиком.
https://infoq.com/articles/improving-testability
#testing
Любой код можно протестировать. Вопрос только в усилиях, которые необходимо затратить на тестирование кода.
Как улучшить тестируемость системы? Н простых шагов:
- Определить анти-паттерны, которые мешают тестировать код
- Осознать, что тестирумость приложения важна, в том числе разработчикам
- Осознать, что если автотесты пишут тестировщики и они подключаются после разработки - вносить изменения будет сложно
- Проводить ретроспективы - почему что-то было сложно протестировать и как это исправить, а что было легко протестировать и как это закрепить
- Думать о тестировании на шаге проектирования системы. Обсуждать архитектуру решения вместе с тестировщиком.
https://infoq.com/articles/improving-testability
#testing
InfoQ
Improving Testability: Removing Anti-Patterns through Joint Conversations
Code is always testable, but the cost may be high, and the effort exhausting. We can change code to be highly testable by identifying anti-patterns and fixing them. And developers can make the code fit the test requirements, by having discussions with the…
Gateway Pattern
Статья в блоге Мартина Фаулера про Gateway Pattern. Gateway инкапсулирует в себе знание об общении с внешним сервисом. Это гарантирует, что нюансы внешнего сервиса не растекутся по всей кодовой базе, а изменения в API внешнего сервиса можно обрабатывать только в Gateway. Кроме этого, Gateway полезен для мока в тестах.
https://martinfowler.com/articles/gateway-pattern.html
#martin-fowler #pattern
Статья в блоге Мартина Фаулера про Gateway Pattern. Gateway инкапсулирует в себе знание об общении с внешним сервисом. Это гарантирует, что нюансы внешнего сервиса не растекутся по всей кодовой базе, а изменения в API внешнего сервиса можно обрабатывать только в Gateway. Кроме этого, Gateway полезен для мока в тестах.
https://martinfowler.com/articles/gateway-pattern.html
#martin-fowler #pattern
martinfowler.com
Gateway
An object that encapsulates access to an external system or resource