4

すべての集約内で一貫性を保証する必要があります。データベースまたはフレームワークからのトランザクションをいつでも使用できるため、リポジトリで行うのは簡単です。リポジトリの外で何が起こるかについては疑問があります。サービスは、リクエストを処理するために複数の集約と連携する必要がある場合があります。サービスでの処理中、または集計の永続化中に問題が発生する可能性があります。

サービスの処理中に何か問題が発生した場合、例外を発生させることができます。そうすれば、操作はアトミックになります。これが私の最初の懸念です。それは良い習慣ですか?私が見ている問題は、そこから回復するのが難しいということです。すべての集計を、操作が失敗する前の状態のままにしておく簡単な方法はありません。

私が抱えているもう 1 つの問題は、集約の 1 つを永続化できない場合にどうなるかということです。情報の一貫性を確保するにはどうすればよいですか? リポジトリの外部でデータベース トランザクションを使用する必要がありますか? ドメイン モデルを設計しているときにデータベースのことを考えるべきではないので、これは最善の解決策ではないかもしれないと考えていました。

4

1 に答える 1

3

これに対する解決策は、Unit of Work パターンで提供されています - http://martinfowler.com/eaaCatalog/unitOfWork.html

必要な数の集約ルート操作を 1 つの UOW にカプセル化できます。作業単位の具体的な実装には、関連する永続化方法とテクノロジに固有の独自のコミットおよびロールバック ロジックを含めることができます。たとえば、.NET で作業している場合は、TransactionScopeオブジェクト ( http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx ) を処理します。

これは、基本的な UOW パターンを実装する方法に関する適切な記事です - http://msdn.microsoft.com/en-us/magazine/dd882510.aspx

于 2012-07-25T20:24:21.010 に答える