Я хочу реалізувати свою першу заявку за допомогою шаблону CQRS разом із пошуком подій. Мені цікаво, як зі створенням сукупних коренів слід правильно поводитися. Скажімо, хтось надсилає команду CreateItem. Як з цим поводитися? Де подію ItemCreate слід зберігати? Як перша подія нового предмета? Або я повинен мати якусь сутність ItemList, яка агрегує всі елементи та її список подій складається лише з подій ItemCreate?
Уді Дахан пропонує не створювати сукупні корені і завжди використовувати замість цього якийсь метод отримання. Але як я можу отримати щось нове і, звичайно, не присвоєно жодного посвідчення особи. Я розумію ідею, і цілком розумно думати, що новий об’єкт - це об'єкт, який має свій стан, що складається з нульових подій, на які відповіли. Але як я повинен його використовувати? Чи повинен я мати у своєму сховищі окремий метод, як-от getNewItem()
чи зробити так, щоб get(id)
метод Optional<ItemId>
замість цього прийняв ?
Редагувати: Через деякий час копання я виявив справді цікаву реалізацію вищезазначених зразків за допомогою акторів. Автор замість створення агрегату витягує його з якогось сховища з новоствореним UUID. Недолік такого підходу полягає в тому, що він допускає тимчасовий стан невідповідності. Мені також цікаво, як я можу реалізувати delete
метод з таким підходом. Просто додайте Видалену подію до списку подій у сукупності?