10/21

DDDにおいて複数集約間の整合性確保に関連して質問です。

DDDはユースケース層(アプリケーション層)の一つのメソッドに対して1トランザクションにすべきでしょうか。

明示的な記載を見つけることができませんでしたが、IDDDなどを参考にしても、@Transactionalアノテーションはユースケース層の1メソッドに対応しています。

1トランザクションにすべきであれば、複数集約にまたがるようなユースケースの場合、1ユースケース1トランザクションを守ろうとすると必然的に複数集約1トランザクションになり、1集約1トランザクションの原則を守れなさそうです(メッセージ基盤を利用したドメインイベントによる非同期連携の仕組みがない場合を想定)。

そのため、ユースケースが1集約のみ利用するようにユースケースを細かく分けて、ユースケースを呼ぶ側が複数ユースケースを呼ぶような工夫が必要なのかと思いました。

諸説ありますが、私は1ユースケース1トランザクションで複数集約を更新しても良いと言う意見です。 実際それで開発したことがあり、十分に実践的だと思っています。 大切なことは「DDDではこう決まっている」ではなくメリットデメリットに基づいて判断することです。1トランザクションで複数集約更新するデメリットについて調査したのですが、「トランザクションをかける範囲が大きくなりすぎ、ロックをかけたり排他制御で問題が生じる」と言うものでした。(それ以外に見つけられなかったのでご存知の方いらしたらご指摘ください) そう考えると、それを考慮した上でロックの範囲が適切であれば、集約またぎで1トランザクションでも問題ない、と言うのが現時点の私の意見です。

スポンサーリンク

スポンサーリンク

スポンサーリンク