私はDDDの方法と関連する主題を学ぼうとしています。私は、「銀行」を実装するための単純な境界付きコンテキストのアイデアを思いつきました。変更の履歴を保持することも重要です。
アカウントエンティティを特定しました。そのイベントソーシングは、その変更を追跡するのに適しています。他のエンティティまたは値オブジェクトは問題とは無関係であるため、それらについては触れません。
預金と引き出しを検討する場合-変更される集計は1つしかないため、比較的簡単です。
転送する場合は異なります-2つの集計は1つのMoneyTransferredイベントで変更する必要があります。DDDは、1つのトランザクションでの複数の集約の変更を非推奨にします。一方、イベントソースのルールは、エンティティにイベントを適用し、それらに基づいて状態を変更することです。イベントを単純にデータベースに保存できれば問題ありません。ただし、イベントソースエンティティの同時変更を防ぐには、各トランザクションのイベントストリームをバージョン管理するものを実装する必要があります(トランザクションの境界を維持するため)。バージョン管理には別の問題があります-単純な構造を使用してイベントを格納し、それらを読み取って集計に適用することはできません。
私の質問は、「1つの集約1つのトランザクション」、「イベント->集約の変更」、および「同時変更防止」の3つの原則をまとめるにはどうすればよいですか。