Open3
イミュータブルデータモデルについて調べる

イミュータブルデータモデルのメリデメと設計パターンとかを整理したい

イミュータブルデータモデルが解決できる課題
- 過去の状態を追えない
- mutable(可変)なデータモデルでは、過去の状態が失われる。
- 変更前後の差分や履歴を業務で活用できない。
- いつ何が変更されたかが分からない
- 変更日時や変更理由を記録しないと、なぜ・いつ変更されたのかが追えない。
- 監査やトラブル時の追跡が困難になる。
- 更新の副作用でデータの整合性が壊れる
- 同じエンティティを複数の業務ロジックが更新すると、意図しない変更やバグが起きやすい。
- テストが難しくなる
- 状態が可変だと、テスト時に「どの状態を再現すればよいか」が曖昧になりやすい。
- テストの予測可能性が低下する。
- 複雑なロジックの可読性・保守性が下がる
- 可変データだと、いつどこでデータが変わるかの追跡が難しく、コードの読みづらさにつながる。
- ドメインイベントが扱いづらい
- イミュータブルにすることで、状態の変化を「イベント」として扱いやすくなり、ドメインイベントの導入がしやすくなる。
- 「時間を軸にしたデータ活用が難しい」問題
- 時系列分析や「この時点ではどうだったか」といった分析が難しくなる。

上記に加えて、並列で処理する場合のロック競合が起こりやすいというのもある。
ロック解除待ちやデッドロックなどを回避するには、多くの場合 UPDATE をしなければ問題は起きない。