Open1
クリーンアーキテクチャ上でトランザクションをどう実現するか
整合性を保つために、2つのテーブルに対して保存・更新を行いたいときは、トランザクションを貼ることになるが、クリーンアーキテクチャでいうアプリケーション層に対してデーターベース・トランザクションを記述してしまうと、アプリケーション層に特定の技術基盤のコード(RDB)
の責務があるコードを実装してしまうことになる。
解決方法
- 割り切ってアプリケーション層に実装する
- AOP(アスペクト指向プログラミング)を使う
-
UnitOfWork
を使用する
割り切ってアプリケーション層に実装する
「ビジネス上も整合性というのは非常に大きな概念
であり高次元の概念ではあるため、詳細な処理は確かに低次元になるものの、ビジネスロジックの整合性担保のために、トランザクションの開始と終了を主張しても良い。」
上記のように割り切って考える。
AOPを使う
pythonで言うなら要はデコレータのことになる
UnitOfWorkを使用する
一番有効そうな手法。
コンテキストマネージャーの考え方が重要になる。
「トランザクションによる防衛」の項目