Я намагаюся вивчити способи DDD та суміжних предметів. Я придумав простий обмежений контекст для реалізації "банку": є рахунки, гроші можна здати на зберігання, зняти та перерахувати між ними. Також важливо зберігати історію змін.
Я визначив організацію облікового запису, і джерело пошуку подій було б добре відстежувати зміни в ньому. Інші сутності або цінні об'єкти не мають значення для проблеми, тому я не буду їх згадувати.
Якщо розглядати депозити та зняття коштів - це відносно просто, оскільки модифікований лише один агрегат.
При передачі це інше - два агрегати повинні бути змінені однією подією MoneyTransferred . DDD знецінює зміну декількох агрегатів за одну транзакцію. З іншого боку, правило джерела подій полягає в застосуванні подій до об'єктів та зміні стану на їх основі. Якби подію можна було просто зберігати в базі даних, проблем не було б. Але для запобігання одночасній модифікації об'єктів, що походять з подій, ми повинні реалізувати щось, що модифікує потік подій кожного агрегату (щоб зберегти межі транзакцій). З версіями виникає ще одна проблема - я не можу використовувати прості структури для зберігання подій та їх читання назад, щоб застосувати їх до сукупності.
Моє запитання - як я можу об'єднати ці три принципи: «одна сукупність однієї транзакції», «подія-> зміна сукупності» та «попередження одночасних змін»?