Важным архитектурным моментом, на котором хотелось бы заострить внимание, является
интеграция без посредников. Когда разработка ведётся с нуля, первым шагом является декомпозиция решения на сервисы, распределение между ними ответственности. В контексте доменно-ориентированного подхода для декомпозиции, как правило, используется
предметно-ориентированное проектирование (
domain-driven design — DDD). Далее выстраивается взаимодействие между сервисами. При этом отсутствует необходимость в посредниках, сервисы органично и естественно взаимодействуют друг с другом.
Потребность в отдельных интеграционных решениях возникает в том случае, если хотя бы один компонент, участвующий во взаимодействии, не может быть удобным и надёжным участником взаимодействия. Например, такой компонент не может предоставлять удобные контракты, достаточно быстро адаптироваться к изменениям контрактов смежных сервисов или обеспечить собственную надёжность и масштабируемость.
Существует несколько простых правил, которые помогут обеспечить
удобство взаимодействия:
- Поставщики должны заботиться об удобстве контрактов для потребителей, а потребители должны заботиться об адаптации к изменениям в контрактах поставщиков.
- Целесообразно использовать подходы Contract-First и API-First для разработки удобных API.
- Версионирование должно быть удобным и предсказуемым. Для этого можно использовать семантическое управление версиями и поддерживать обратную совместимость как минимум между двумя основными версиями контрактов.
- В случае, если у поставщика много клиентов, можно предоставлять готовые клиентские библиотеки для API.