На самом деле я блуждаю по полям DDD и NoSql. Теперь у меня есть сомнения: мне нужно создавать события из агрегата, и я хотел бы использовать хранилище NoSql. Но как я могу быть уверен, что события сохраняются в хранилище, а изменения в корне агрегата не имеют транзакций? Имеет ли это смысл? Есть ли способ сделать это без необходимости использовать источник событий или транзакционную базу данных? На самом деле я искал реализацию двухфазного алгоритма фиксации, но он кажется довольно тяжелым с точки зрения производительности ... Я неправильно подхожу к проблеме? Набитые вопросами... Спасибо за каждое предложение, Энрико.
PS Я новичок в stackoverflow, поэтому любое предложение/критика/... более чем приветствуется Энрико
Изменить 1
Ну, мне нужны события, чтобы уведомлять агрегаты о том, что что-то произошло, и они должны реагировать на изменение. Проблема возникает, когда такие события важны для бизнес-логики. Насколько я понял, после ночи размышлений я не могу использовать хранилище nosql для таких вещей. Позвольте мне объяснить (думая громким голосом :P):
- С ES (1-й пейзаж): сохраняю "diff" данных. Затем я создаю событие, связанное с ним. 2 операции.
- С ES (2-й пейзаж): сохраняю "diff" данных. Процесс, наблюдайте за ES и производите событие. Но я привязан к тому, чтобы иметь только один процесс-наблюдатель, чтобы обеспечить правильный порядок событий.
- С ES (3d декорации): Идемпотентные события. События могут быть выведены по состоянию, и каждое повторное применение события может вызвать изменение у потребителя только один раз, может иметь несколько процессов «удаления из очереди», дубликаты не могут произойти. 1, но накладывает серьезные ограничения на потребителей.
- В общем: сохраняю данные агрегата. Затем я создаю событие, связанное с ним. 2 операции.
Теперь вопрос становится шире imho, можно ли работать с доменными событиями и nosql, когда такие доменные события являются фундаментальной частью бизнес-процесса? Я думаю, что это может быть лучшим вариантом для реляционной системы... даже если мне потребуется добавить довольно много машин, чтобы получить ту же производительность.
Редактировать 2. Для полноты поиска по запросу "domain events nosql idempotent" в Google: http://svendvanderveken.wordpress.com/2011/08/26/transactional-event.-основанное-nosql-storage/