Мы используем хранилище событий, в котором хранится один агрегат - заказ пользователя (представьте себе заказ Amazon, который может быть обновлен в любой момент как клиентом, так и кем-либо из компании, занимающейся электронной торговлей, до того, как он действительно будет отправлен).
Впервые мы позволим сотрудникам нашей компании просматривать историю заказа, поскольку до сих пор они могли видеть только его текущее состояние.
Теперь мы понимаем, что события, которые формируют совокупный корень, на самом деле не показывают намерение или то, что на самом деле сделал пользователь. Они служат только для построения текущего состояния заказа при последовательном применении к пустому заказу. Вопрос: они должны?
Представьте себе пользователя, у которого изначально была одна копия книги X, а затем удалили ее и снова добавили 2. Должны ли мы рассматривать это как событие «Пользователь добавил 1 книгу» или события «Пользователь удалил 1 книгу» + «Пользователь добавил 2 книги» (мы, кажется, следовали этому подходу)?
В некоторых случаях у нас есть одно начальное событие, за которым следуют другие события. Я, разработчик, точно знаю, что все эти события были вызваны одной командой, но мне кажется невероятно хрупким делать подобные предположения при создании на лету этой функциональности «истории заказов», которую увидит пользователь. Но если я не буду относиться к ним, по крайней мере в функции истории заказов, как к одному действию, то будет казаться, что было много изменений в заказе, когда на самом деле была только одна, большая.
Должны ли я иметь "макро" события, которые содержат "микро события" внутри? Должен ли я просто прикрепить идентификатор команды к событию, чтобы я мог легко определить, какое событие произошло в то же самое время, а какое нет (альтернативой было бы полагаться на метки времени ... но это отвратительно).
Какой стандартный подход для решения подобных ситуаций? Я хотел бы иметь возможность в любое время просматривать историю агрегата и создавать этот отчет (я не хочу создавать отчет постепенно при каждом обновлении заказа).
Спасибо