generated at
Consistency
DDDの用語
Integrityより少し広い範囲を見て、別々の概念を表すAとBの関係に一貫性が保たれているか
Consistencyを保つのは設計に大きな負担をかける
重要ではあるが、厳格にしすぎると身動きが取りづらくなる


Order の持つ合計値は、それが含む OrderLine の合計値と一致している
Order の状態がPlaced(注文済み)になっているなら、 Invoice は生成済みである
割引券が使用済みなら、そのコードは使用済みであるとマークされている


『Domain Modeling Made Functional』では4つのパターンにわけてConsistencyの保ち方を説明している
同期的にConsistencyを保つが、Aggregateがそもそもそういうものなので比較的簡単
同期的に保つことを妥協することも考慮に入れる
非同期的であってもEventual Consistencyを保っていれば良いと考える
文脈に依って上2つのいずれかを選択する
新しいEntityを作ることも考慮に入れてみる
同じデータを複数のAggreageが扱う際のConsistency
関数型なら余裕
同じvalidation関数を個々のAggreagateで使えばよいだけ




Integrityとの違いが微妙にわからないが、今のところ以下のように理解しているmrsekut
Integrity(完全性)は、ビジネス上のルールで、いかなる場合も絶対に満たすべき条件
を、満たしていること
Consistencyは、ビジネス上のルールで、満たしていることが望ましいが、満たすまでのタイミングが少しズレていても許容できる条件
を、満たしていること
多分違う気もするけど、よくわからんmrsekut
あるいは、ConsistencyはBounded Contextをまたいでいる前提?
いやそんなことはないか
またぐこともあるが、またがないこともある



参考