TL;DR
一般には、物事に矛盾がなく、全体としてまとまりがあること。ドメインモデルでは、モデルの異なる部分が事実について一致していることを指す。
なぜ必要か
整合性は、ビジネスの事実を正しく保つために必要になる。たとえば、次のようなものが整合性の要件にあたる。
- 注文の合計金額は、個々の明細の合計と同じである
- 注文が確定すると、対応する請求書が必ず作成される
- 注文時に割引クーポンを使うと、そのクーポンを使用済みにする
仕組み
整合性は技術用語ではなく、ビジネスの用語である。整合性が何を意味するかは、常にビジネスのニーズに依存する。たとえば、製品の価格が変わったときに未発送の注文をすぐ新しい価格に更新すべきか、顧客の住所が変わったときに未発送の注文をすぐ新しい住所に更新すべきかは、状況によって答えが変わる。
整合性は、永続化の原子性(アトミックであること)と関連している。注文がアトミックに保存されなければ、注文の内部の整合性を確保しても意味がない。注文の各部分を別々に永続化すると、一部の保存だけが失敗したときに、後でその注文を読み込んだ人は整合性のない注文を受け取ることになる。
注意点
整合性を考慮した設計には多大な労力がかかる。要件収集のときにプロダクトオーナーが求める整合性のレベルが現実的でないこともあり、それをそのまま受け入れないほうが望ましい場合もある。そもそも、その整合性が必要なくなることもある。
自分の理解
整合性はすべてを最初から作り込まず、先に固めたいところだけに注力し、後から足していくのもよい。特にお金に関わるところは先に固めたい。