/note/tech

ウェブアプリケーションにおけるドメインモデルの状態遷移のこと

ウェブアプリケーションはステートレスであるべきだという文脈には状態はすべてDBに保存する前提がある。複数のウェブアプリケーションが整合性を維持して状態管理できないからだ。状態遷移はDB依存になり失敗するようになる。重要なロジックもドメインモデルではなくDAOに移動せざるを得なくなる

@j5ik2o

インメモリならグループにメンバーを追加する(Group#addMember)のは簡単だし失敗しない。間にも考えずにそのままグループの状態をDBに移したらこのメソッドは失敗する可能性がある。複雑性があがる。またレイテンシに大きな差が生まれやすいのでロジックが破綻しやすい。

@j5ik2o

状態遷移(ドメインの振る舞いを持つビジネスロジック)はインメモリで、状態の保存や取り出しは永続化オブジェクトでやるほうがよい。それがDDDのリポジトリパターン。リポジトリはビジネスロジックを持たない。本質的にはDBに状態を持つことに変わりないが、局所化の戦略を取っている

@j5ik2o

もうひとつの戦略が、イベントソーシングと分散型ステートフルアプリケーション。この話はまたあとで。

@j5ik2o