Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
忙しいひとのためのCQRS/quickly-cqrs
Search
Mafuyu Kamono
May 17, 2019
Programming
1.5k
9
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
忙しいひとのためのCQRS/quickly-cqrs
Mafuyu Kamono
May 17, 2019
More Decks by Mafuyu Kamono
See All by Mafuyu Kamono
GAE 2nd gen (gVisor based GAE) が出たので GAE 導入を決めました/ GAE 2nd gen is good
mfykmn
0
340
GAE SE 2nd Genのススメ/recommend-gae-se-2nd-gen
mfykmn
0
310
Orbsから始めるTerraform生活/ terraform-life-starting-from-orbs
mfykmn
2
730
Other Decks in Programming
See All in Programming
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
450
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
270
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
680
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
550
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
190
R8 の設定見直しでアプリサイズ削減
andpad
0
140
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
440
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
14
6.6k
iOSDC2026登壇資料.pdf
riofujimon
0
210
The Rails Doctrine Decade
koic
2
500
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
140
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
150
Featured
See All Featured
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
470
For a Future-Friendly Web
brad_frost
183
10k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The Curse of the Amulet
leimatthew05
3
15k
A Tale of Four Properties
chriscoyier
163
24k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
340
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
A better future with KSS
kneath
240
18k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
360
Crafting Experiences
bethany
1
370
Transcript
© DMM.com CONFIDENTIAL © DMM.com 忙しい人のためのCQRS 加茂野真冬 - DMM.com LLC
2019.0.517 第二回大新卒LT会
© DMM.com 目標 2 CQRSのことをざっくりでいいので雰 囲気掴んでもらう
© DMM.com 今日話さないこと 3 • CQRSの使用した感想 • CQRSの実装周りの話 • CQRSの深い話
© DMM.com 4 $ cat about-me.toml [user] fullname = "Mafuyu
Kamono" orgnization = "DMM.com LLC" position = "Backend Engineer" detail = "https://mafuyuk.com" twitter-id = "@mafuyuk_m"
© DMM.com CQRSとその文脈で出てきたアーキテクチャたち 5 CQS CQRS DDD Microservices EventSourcing
© DMM.com CQRSとその文脈で出てきたアーキテクチャたち 6 CQS CQRS DDD Microservices EventSourcing CQRSはCQSの考えを元に考案された
© DMM.com CQRSとその文脈で出てきたアーキテクチャたち 7 CQS CQRS DDD Microservices EventSourcing CQRSはドメイン層の分離が行われているアプリ
ケーション、アーキテクチャに対しての提案なの で、DDDの拡張パックのイメージ
© DMM.com CQRSとその文脈で出てきたアーキテクチャたち 8 CQS CQRS DDD Microservices EventSourcing CQRSの実装パターンにMicroservicesに効果
的なパターンがある
© DMM.com CQRSとその文脈で出てきたアーキテクチャたち 9 CQS CQRS DDD Microservices EventSourcing CQRSの提案内で出てくるアーキテクチャ
CQRS + ESのような形でCQRSを拡張するもの
© DMM.com 10 CQS
© DMM.com CQSとは 11 • Command Query Separation ◦ コマンド・クエリ分離
• Bertrand Meyer氏が自著内(1997年)で考案した 手法
© DMM.com CQSとは 12 オブジェクトのメソッドを明確に2つのカテゴリに分け ましょう • Command ◦ 副作用がある操作
◦ 結果を返さない • Query ◦ 副作用がない操作 ◦ 結果を返す
© DMM.com ここでいう副作用とは? 13 永続化層にあたる部分に対して操作を行い状 態が変化すること 内部ス トレージ 外部ス トレージ
外部 API キュ ー メソッド 状態が変化するならそ のメソッドは Command! 状態が変化しないなら それはQuery! 常駐インスタン スの属性
© DMM.com 14 CQRS
© DMM.com CQRSとは 15 • Command and Query Responsibility Segregation
◦ コマンド・クエリ責務分離 • Greg Young氏が2010年に考案したパターン ◦ https://cqrs.files.wordpress.com/2010/11/cqrs_documen ts.pdf • CQSを基にしている • CQRSで追加したのはCommandとQueryでまったく 別のモデルを作成するという考え方
© DMM.com CQRSとは(CQRS導入前) 16 data storage IF ドメインモデル データモデル APPサーバー
CommandとQueryを 持っている カンペ: CommandとQueryで別のモデルを用意する部分についてもうちょい深掘りしてみます CQRSを導入する前はこんな感じでデータモデル1つにCommand、Queryの特性を持ったメソッドが生えてる感じです。 これに対してCQRS要素をちょっとずつ入れていってみます
© DMM.com CQRSとは(CommandとQueryで別のモデル) 17 data storage IF ドメインモデル Commandデータモデル Queryデータモデル
Commandしかドメイン モデルを介さない APPサーバー カンペ: これが小さいCQRSの実装です。画像のようにCommandデータモデルとQueryデータモデルとして分けてしま います またCommand操作の時のみドメインモデルを介すようにします。この際の恩恵としてはドメインが複雑な場合に、Query 側がドメインモデルを意識しないで済むようにすることで実装がシンプルになります なぜ、意識する必要がないのかというとQueryは副作用がないためです
© DMM.com CQRS(APPサーバーを分けるパターン) 18 data storage IF ドメインモデル Commandデータモデル Queryデータモデル
IF APPサーバー カンペ: あとはAPPサーバーを分けるパターンがあったり、こちらはCommandサーバーとQueryサーバーを別でスケー ルできるなどスケーラビリティの面で恩恵があったりします
© DMM.com CQRS(Data Storageを分けるパターン) 19 Write側の data storage IF ドメインモデル
Commandデータモデル Queryデータモデル IF Read側の data storage APPサーバー カンペ: またdata storageを分けるパターンがあったりします このパターンになるとEvent Sourcingの考えを使うことになるのですが時間が足りないため深掘りしません 結果整合性さえ保てば良いドメインに適用するなど、制限があったりするので注意が必要です
© DMM.com 20 ES
© DMM.com ESとは 21 5分LTだったのでESに触れる時間がありません でした...
© DMM.com 22 END. ご清聴ありがとうございました
© DMM.com 23 参考にした記事の一部 • http://www.minato.tv/cqrs/cqrs_documents_jp.pdf CQRS日本語訳 • https://martinfowler.com/bliki/CommandQuerySeparation.html https://martinfowler.com/bliki/CQRS.html
• https://martinfowler.com/bliki/EagerReadDerivation.html ご存知、マーチン・ファウラー氏つよつよ • https://docs.microsoft.com/ja-jp/azure/architecture/patterns/cqrs https://docs.microsoft.com/en-us/azure/architecture/guide/architecture-styles/cqrs https://docs.microsoft.com/en-us/previous-versions/msp-n-p/jj554200(v=pandp.10) https://docs.microsoft.com/en-us/previous-versions/msp-n-p/jj591568(v=pandp.10) https://docs.microsoft.com/en-us/previous-versions/msp-n-p/jj591573(v=pandp.10) https://docs.microsoft.com/ja-jp/azure/architecture/patterns/event-sourcing AzureがArchetecture patternをまとめててそこにCQRSも載ってる • http://tanakakoichi9230.hatenablog.com/entry/9613242131 https://www.slideshare.net/koichiromatsuoka/ddd-x-cqrs-orm http://qcontokyo.com/data_2016/pdf/B-2_2_JunichiKato.pdf https://speakerdeck.com/j5ik2o/cqrs-plus-es-zai-ru-men https://cqrs.wordpress.com/documents/building-event-storage/ その他、見て良さげな雰囲気のもの