Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CQRS そして現実へ
Search
l-freeze
July 25, 2024
Programming
0
49
CQRS そして現実へ
l-freeze
July 25, 2024
Tweet
Share
More Decks by l-freeze
See All by l-freeze
referential-transparency
lfz
0
10
エンティティリレー
lfz
0
28
Other Decks in Programming
See All in Programming
Developing static sites with Ruby
okuramasafumi
0
320
エディターってAIで操作できるんだぜ
kis9a
0
750
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
230
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
360
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
140
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
120
Cap'n Webについて
yusukebe
0
150
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
10
1.4k
マスタデータ問題、マイクロサービスでどう解くか
kts
0
120
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
290
Grafana:建立系統全知視角的捷徑
blueswen
0
180
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
120
Featured
See All Featured
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
0
22
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Odyssey Design
rkendrick25
PRO
0
430
Designing Powerful Visuals for Engaging Learning
tmiket
0
190
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Automating Front-end Workflow
addyosmani
1371
200k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
The Invisible Side of Design
smashingmag
302
51k
So, you think you're a good person
axbom
PRO
0
1.8k
Chasing Engaging Ingredients in Design
codingconduct
0
84
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
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していきましょう。
おしまい そして現実へ…