CQS
#TODO
#宣言的UIの設計レシピ
#設計
https://en.wikipedia.org/wiki/Command–query_separation
ReadModel
と
WriteModel
を分ける考え方
CQRSの観点から考えるGraphQLのスキーマ設計
Immutable Model
アーキテクチャ
レベルに適用させたものは
CQRS
GUI
では代表的なものに
Redux
がある
CQS
や
Stateモナド
を
Global State
向けに実装した
CRUD
において、ReadとWriteでは関心が違う
https://speakerdeck.com/qsona/architecture-decision-for-the-next-n-years-at-studysapuri?slide=35
https://scrapbox.io/files/634c7bf7922c50001d4f5d92.png
ReadModel
トラフィック
が多い
ドメインロジック
はほぼない
あったとしても
Policy
ぐらい
副作用は原則として持たない
#冪等性
テスト
も重要ではない
読み込みに関してドメインモデルは必要ない
読み込みの機能には抽象化層がほとんど必要ないため単体テストを行う意味がない
結果整合性
子の目的に応じて柔軟に取り出せるインタフェースがほしい
Selector
のような概念が欲しい
→stateの形を考える際、「表示にとって都合のいい形を考えなくてよくなる
ユースケース
が増えやすい
Write系の変更時にはRead系への
リグレッション管理
が大事
非機能要件
による局所最適化が必要となるケースが多い
再利用性
を考えるのが難しい
非同期処理が多い
リアクティブステート参照の勘所
WriteModel
トラフィック
は多くない
更新系処理はデータ構造やサービス特性と密なのでドメインロジックが多い
強整合性
副作用
が主
複雑性
が高い
サービス固有の
ドメイン
知識が必要
テスト容易性
が重要
Read系と比較すると
ユースケース
の増加は緩やかだが変更が難しい
リアクティブステート更新の勘所
ほか
通知サービスに必要な要件
一般的に
WriteModel
は
依存関係
が複雑になる
機能は追加よりも変更したり削除するほうが難しい
Domain Modeling Made Functional
ではビジネスイベントとワークフローに注目して分解する
GraphQLはドメインの概念の関連をフィールドで表すだけで素直に表現できる