Event Storming
Event Storming — техника коллективного моделирования бизнес-процессов, основана на событиях
Метод помогает за короткое время выявить ключевые процессы, связи и точки интеграции без сложных нотаций BPMN или UML.
Строится вокруг событий, которые отражают значимые изменения состояния системы. Например, «Заказ создан», «Платёж подтверждён», «Товар доставлен».
Цели:
- Понять, что происходит в системе и почему, визуально зафиксировав все важные события и связи между ними
- Чтобы разработчики, аналитики, эксперты и менеджеры под одними и теми же словами понимали одно и то же.
- Увидеть все "узкие места", противоречия и пробелы бизнес-процесса.
- Создать основу для проектирования архитектуры
Примеры применения
- запуск новой системы;
- проектирование микросервисной архитектуры;
- анализ существующего (legacy) решения перед рефакторингом;
- уточнение сложных или неявных процессов между подразделениями.
Основные принципы
- Фокус на событиях, а не на действиях или ролях.
- Совместная работа: участвуют бизнес, аналитики, архитекторы и разработчики.
- Минимум формализма: главное — содержание, а не визуальная строгость.
- Динамика: быстро фиксировать идеи, не вдаваясь в детали на раннем этапе.
- Причинно-следственные связи: каждое событие должно иметь причину и следствие.
Типы Event Storming-сессий
Big Picture
Используется для получения общего представления о домене.
Позволяет увидеть ключевые процессы и зависимости между ними.
Пример: визуализация полной цепочки «Заказ → Оплата → Доставка → Возврат».
Process Level
Детализирует конкретный бизнес-процесс.
Помогает определить события, команды и участников внутри него.
Пример: разбор процесса «Возврат товара» — от запроса покупателя до перевода средств.
Design Level
Уточняет модель до уровня архитектуры и bounded contexts.
Используется при проектировании микросервисов и взаимодействий между ними.
В DDD большая система декомпозируется на ограниченные контексты (bounded contexts).
Bounded Context — четко опр еделённая граница в DDD, внутри которой термины и правила имеют единый смысл, а взаимодействие с другими частями системы происходит через явные интерфейсы.
Пример: разбиение домена e-commerce на контексты — «Заказы», «Платежи», «Доставка», «Уведомления».
Ключевые "строительные блоки"
Используются разноцветные стикеры под каждый вид.
- Domain Event (Событие предметной области): Главный элемент. Факт, который уже произошел в системе. Всегда используется прошедшее время.
- Пример:
Заказ размещён,Платёж подтверждён,Товар отправлен клиенту.
- Пример:
- Command (Команда): Действие, которое инициирует выполнение операции и приводит к событию. Часто является реакцией на предыдущее событие.
- Пример:
Разместить заказ,Подтвердить платёж,Отправить товар.
- Пример:
- Actor (Актор): Пользователь или внешняя система, которая вызывает команду.
- Пример:
Покупатель,Оператор кол-центра,Платёжный шлюз.
- Пример:
- Aggregate (Агрегат): Ключевое понятие из DDD. Это "кластер" из связанных сущностей (например,
Заказс его позициями), который обрабатывает команды и порождает события. Агрегат — это граница согласованности данных. - Policy (Политика / Бизнес-правило): Автоматическая реакция на событие. Формулируется как "Когда [Событие X], тогда [Команда Y]".
- Пример:
Когда "Платёж подтверждён", тогда "Отправить товар".
- Пример:
- Read Model (Модель чтения): Данные, которые видит пользователь, чтобы принять решение и выполнить команду.
- Пример:
Страница со списком товаров в корзине.
- Пример: