Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CQRS そして現実へ
Search
l-freeze
July 25, 2024
Programming
0
47
CQRS そして現実へ
l-freeze
July 25, 2024
Tweet
Share
More Decks by l-freeze
See All by l-freeze
referential-transparency
lfz
0
9
エンティティリレー
lfz
0
15
Other Decks in Programming
See All in Programming
新メンバーも今日から大活躍!SREが支えるスケールし続ける組織のオンボーディング
honmarkhunt
3
1.5k
ふつうの技術スタックでアート作品を作ってみる
akira888
0
340
すべてのコンテキストを、 ユーザー価値に変える
applism118
2
1.1k
ニーリーにおけるプロダクトエンジニア
nealle
0
730
AWS CDKの推しポイント 〜CloudFormationと比較してみた〜
akihisaikeda
3
320
PipeCDのプラグイン化で目指すところ
warashi
1
250
5つのアンチパターンから学ぶLT設計
narihara
1
150
スタートアップの急成長を支えるプラットフォームエンジニアリングと組織戦略
sutochin26
0
330
なんとなくわかった気になるブロックテーマ入門/contents.nagoya 2025 6.28
chiilog
1
260
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
180
Rubyでやりたい駆動開発 / Ruby driven development
chobishiba
1
550
童醫院敏捷轉型的實踐經驗
cclai999
0
210
Featured
See All Featured
A better future with KSS
kneath
239
17k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
How GitHub (no longer) Works
holman
314
140k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Music & Morning Musume
bryan
46
6.6k
Git: the NoSQL Database
bkeepers
PRO
430
65k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Adopting Sorbet at Scale
ufuk
77
9.4k
We Have a Design System, Now What?
morganepeng
53
7.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Transcript
CQRS そして現実へ…
CQRSって聞いたことありますか?
CQRSとは? CQRS はコマンド クエリ責務分離を表し、データ ストアの読み取りと更新の操作を分離 するパターンです。 参考:https://learn.microsoft.com/ja-jp/azure/architecture/patterns/cqrs
コマンド? クエリー? 責務分離は医師 と薬剤師の事ね
コマンドとは? 副作用のある操作の事 副作用とは? DBの更新や、ログの出力、ファイルの新規作成など・・・ 具体例は? DBならINSERT/UPDATE/DELETEなど
クエリーとは? なにかを参照する操作の事 参照とは? DBの取得や、ログの表示、ファイルの読み込みなど・・・ 具体例は? DBならSELECTなど
クエリーは・・・ タダ!(見るだけなら) タダ!!!(金欠)
コマンドは・・・ 実行すると・・・ 副作用が!!!
コマンドは・・・!!! 実行すると・・・ 副作用が!!!
コード例 (Not CQRS)
部屋を予約する(Not CQRS) もしかして:MVC MVCアーキテクチャーで作られたものは100%CQRSではありません。 (サンプルコードはありません 😞)
コード例 (CQRS)
部屋を予約する(CQRS) 各ファイルの説明 apis/reservation/command/Room.ts 部屋の予約に関するコマンド ソース配置 apis/reservation/query/RoomQuery.ts 部屋の情報(広さなど)に関するクエリー apis/reservation/query/RoomRankQuery.ts 部屋の情報(広さなど)に関するクエリー apis/pages/apiCaller.ts
上記の呼び出し元
apis/reservation/command/Room.ts 部屋予約 予約取り消し 部屋の変更
apis/pages/apiCaller.ts クエリー コマンド
apis/reservation/query/RoomRankQuery.ts,RoomQuery.ts 空き部屋のランク一 覧を取得 部屋のランク一覧を 取得 部屋情報を取得
何が嬉しい?(Query) • ランク情報取得や空き部屋のランク情報取得など、情報取得系の操作はとにかく Queryと書かれているソースを見ればいい • 取得・参照処理だったらQueryを見れば良い、という事だけ覚えておけば良い • だから機能改修で取得結果を変更したい時は何も考えずにQueryだけを触れば良 い •
取得した結果が正しい事だけをテストすれば良い! • 副作用が無いから何回実行しても良い!
何が嬉しい?(Command) • コマンド名を見れば何をするのか分かる! • 副作用が発生する処理だという事が分かる! ◦ なので無闇に実行してはいけない事が分かる。 ◦ なので機能改修で修正が必要な場合は自然と緊張感が増す。 •
副作用の結果も考慮してテストする必要がある事が分かる。
現実の例 (Not CQRS)
プログラム教えて 来客です どうされますか? 税理士に提出して 決算報告書提出して 資料できました! どうですか? 決算は丁寧確認して、 貸借対照表と簿記は提出 してOK、資料はプログラム
の後で、来客対応先にして・・・ 💦
現実の例 (CQRS)
プログラム教えて 来客です どうされますか? 資料できました! どうですか? こいつら全部クエリー やな、ナンボ来ても良 さそうや
税理士に提出して 決算報告書提出して う、副作用のあるもの ばかり、これはコマンド ね 提出結果も確認しな きゃ
何が嬉しい?(現実) 副作〆
まとめ • クエリーとコマンドは分ける • クエリーは何度実行しても問題無い • コマンドは副作用が発生する
余談
気を付けること ここまでの話は機能に限ったものです。それ以外に関しては一切考慮をしていません。
気を付けること、それは非機能要件 クエリーも何度も実行し続ければ負荷が掛かります。同時に実行する数が多ければ極 端に負荷が掛かります。負荷に耐えられなければシステムは死んでしまいます。 これを機能に関係ない要件、非機能要件と言います。 非機能要件にも注意を払いながらCQRSしていきましょう。
おしまい そして現実へ…