Представьте, что в один прекрасный день к вам пришёл заказчик и говорит: "в рамках импортозамещения мы должны отказаться от Jira и вместо неё разработать собственный инструмент для управления задачами". Конкретно вам поручено разработать небольшой сервис. Этот сервис оперирует статусами задач и подзадач, которые в неё входят.
Мы должны принять важное архитектурное решение. Можно конечно при смене статусов сабтасок ещё и обрабатывать статусы родительских тасок. И если они меняются, тут же ещё и встраивать логику по отправке email. Но это делает логику не расширяемой и сложной в поддержке. Если завтра появится ещё несколько статусов, мы получим спагетти-код.
Чтобы этого избежать, лучше сразу сделать компоненты системы менее связанными и обеспечить их взаимодействие через события. То есть если меняется статус сабтаски - мы генерим соответствующий эвент. Далее компонент обработки статуса получает это событие, выполняет проверку остальных сабтасок и при необходимости меняет статус родительской задачи.
При построении event-driven системы можно использовать разные брокеры сообщений, но мы рассмотрим наиболее популярный из них - RabbitMQ.
В тестовых целях "кролика" можно развернуть в один клик на платформе dockhost.ru
Подробности читайте на Хабре в моей новой статье RabbitMQ и Kotlin: делаем свою event-driven Jira на Spring.
Post #142
321

- 👍 5
- 🔥 2