Как проверить поток событий в DDD - Event Sourcing? Как я узнаю, что поток находится в допустимом состоянии?
В проекте, управляемом доменом, модель домена отвечает за обеспечение того, чтобы состояние удовлетворяло вашему инварианту домена. Вы можете думать об этом как о функции
everythingWeKnowNow = domainModel(everythingWeKnewBefore, newInformation)
По мере поступления новой информации, мы интегрируем ее с тем, что произошло раньше, чтобы создать новую версию «истины».
В мире CQRSвсе это происходит в «модели записи» - мы работаем от авторитетного представления «истины», а не устаревшей копии, и мы изменяем ее в соответствии с требованиями домена.
Источник событийpart на самом деле представляет собой просто разницу в представлении: вместо того, чтобы вычислять новое состояние, затем перезаписывать нашу предыдущую копию, мы вычисляем изменения и добавляем эти изменения к нашему предыдущему (мы всегда можем заново вычислить состояние, просто перечислив список изменений).
Таким образом, наша авторитетная копия состояния всегда содержит события, которые были вычислены моделью предметной области в том порядке, в котором они были записаны.
Общая схема здесьидея о том, что модель является источником информации в системе, а источники событий - это просто другой способ хранения данных. на информацию (тот, который поддерживает временные запросы).
Для частей решения, которые требуют авторитетного упорядочения событий, хитрость заключается в том, что вы извлекаете их из хранилища событий в виде упорядоченной последовательности, не , читая их по одному и пытаясь восстановить последовательность. Другими словами, вы будете использовать модель извлечения, а не модель push для передачи событий из одной системы в другую.
Когда вы работаете в системе, основанной на модели push, и события могутбыть неправильно заказанным, тогда Вы должны встроить это в свой дизайн. Это обычно происходит в форме отслеживания отсутствующей информации и ожидания ее поступления.
(Вы также должны уделять больше внимания time ; время прибытия сообщения - довольно тяжелое времявместо того, чтобы знать, когда что-то произошло).
Распределенные системы сложны , и короткие пути, которые мы узнали, когда все было локально, больше не работают.