集約ルートとして X があり、別の集約ルートとして Y があるとします。NoSql ドキュメント データベースを使用すると、X は Y の ID によって Y への参照を保持します。Y が (X のコンテキスト外で) 削除された場合、X は存在しない Y への参照を保持します。
DDD でこの問題を解消または解決するために提案されているソリューションは何ですか?
集約ルートとして X があり、別の集約ルートとして Y があるとします。NoSql ドキュメント データベースを使用すると、X は Y の ID によって Y への参照を保持します。Y が (X のコンテキスト外で) 削除された場合、X は存在しない Y への参照を保持します。
DDD でこの問題を解消または解決するために提案されているソリューションは何ですか?
DDD があなたの問題に直接言及しているかどうかはわかりませんが、提案された「解決策」はドメイン イベント/メッセージングにある可能性があります。関連する集約が同じ境界付けられたコンテキスト内にある場合、ドメイン イベントで十分な場合があります。それ以外の場合は、別の境界付けられたコンテキストと通信するためのメッセージング インフラストラクチャが必要になる場合があります。
「削除された」イベントを受け取ったときに何が起こるかは別の話であり、ドメインの専門家が助けてくれる可能性があります。@Dmitry S. で示唆されているように、関連する集計データを値オブジェクトに非正規化して、メイン集計の一貫性を保つのに十分な情報を得る必要がある場合があります。「削除された」イベントを処理する場合、メイン集計に何らかのインジケータを設定するか、データを更新して削除を反映させたい場合があります。
なぜ集約を削除するのでしょうか? Expire() または Suspend() が必要になる場合があります。Deactivate()、Disable()、Ban()、Cancel()、Finish()、または Archive()。しかし、Delete() でデータを失うことで得られるメリットは何でしょうか?
本当にそれが必要な場合 (おそらく法的目的のため)、いくつかの EvaporaitonService を作成する必要があります。これにより、関連するすべての集計が検索され、すべての参照がホイップされます。