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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
350
GAE SE 2nd Genのススメ/recommend-gae-se-2nd-gen
mfykmn
0
310
Orbsから始めるTerraform生活/ terraform-life-starting-from-orbs
mfykmn
2
740
Other Decks in Programming
See All in Programming
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
360
AI-Powered Domain-Driven Design
ziobrando
0
390
React Native에 현대적인 빌드 도구 더하기: Rollipop 구현기
leegeunhyeok
0
180
느린 네트워크와 저사양 디바이스 사용자를 위한 웹뷰 로딩 시간 개선기
kmkim
1
190
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.5k
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
140
JIS keyboard support in Omarchy
lef237
0
180
Enforcing Your Architecture with Unit Tests in the AI Era (Swift Connection X)
steliosf
PRO
1
140
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
1.2k
Railsバージョンを4倍にした話
optim
0
930
Zero-Tap Sign-In対応、結局何をすればいいの?
mitohato14
0
1.5k
Kotlinize Is Not Just Converting to Kotlin
chigichan24
1
220
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2.1k
How to make the Groovebox
asonas
2
2.5k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
630
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
740
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
520
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
660
The SEO Collaboration Effect
kristinabergwall1
1
620
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/ その他、見て良さげな雰囲気のもの