Ответ
Event Sourcing хранит состояние системы как последовательность событий, а CQRS разделяет операции на команды (изменяющие данные) и запросы (читающие данные). Их часто используют вместе, потому что:
-
Согласованность
Event Sourcing гарантирует, что все изменения проходят через события, а CQRS обеспечивает разделение чтения и записи, что упрощает масштабирование. -
Гибкость
CQRS позволяет иметь разные модели для чтения (проекции), которые можно перестраивать из событий Event Sourcing. -
Производительность
Запросы могут использовать оптимизированные представления данных, а команды работают с событиями, что снижает нагрузку.
Пример:
// Command (запись)
class CreateOrderCommand {
execute(data) {
const event = new OrderCreatedEvent(data);
eventStore.save(event); // Сохраняем событие
}
}
// Query (чтение)
class OrdersQuery {
getOrders() {
return readModel.getOrders(); // Читаем из проекции
}
}