Open3

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

たすくんたすくん

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

たすくんたすくん

イミュータブルデータモデルが解決できる課題

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

https://qiita.com/javano/items/a1021fdf7d1f090a13ca

たすくんたすくん

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