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
DDDお悩み相談事例 シーズン1
Search
かとじゅん
September 06, 2019
Programming
3
1.3k
DDDお悩み相談事例 シーズン1
かとじゅん
September 06, 2019
Tweet
Share
More Decks by かとじゅん
See All by かとじゅん
CQRS/ESになぜアクターモデルが必要なのか
j5ik2o
0
530
メッセージ駆動が可能にする結合の最適化
j5ik2o
10
4k
曖昧なプロンプトでも正しいコードが書ける理由
j5ik2o
0
430
AIコーディングエージェントの現実と設計品質の重要性
j5ik2o
0
130
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
16
7.8k
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
8
1.5k
メッセージとイベントを中核に置いたシステム設計の有用性について
j5ik2o
12
4.2k
私のキャリアの旅路: 技術をきっかけに変化を楽しむ
j5ik2o
3
1k
いかに開発効率と品質を高めるか: ドメイン駆動設計と組織パターンの視点から考える
j5ik2o
5
3.1k
Other Decks in Programming
See All in Programming
CSC307 Lecture 01
javiergs
PRO
0
650
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
430
これならできる!個人開発のすゝめ
tinykitten
PRO
0
140
ゆくKotlin くるRust
exoego
1
190
クラウドに依存しないS3を使った開発術
simesaba80
0
210
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
愛される翻訳の秘訣
kishikawakatsumi
3
370
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
630
AtCoder Conference 2025
shindannin
0
900
Go コードベースの構成と AI コンテキスト定義
andpad
0
150
Developing static sites with Ruby
okuramasafumi
1
340
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
160
Featured
See All Featured
A Tale of Four Properties
chriscoyier
162
23k
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
It's Worth the Effort
3n
187
29k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
360
Unsuck your backbone
ammeep
671
58k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
1
220
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
0
1k
Building an army of robots
kneath
306
46k
First, design no harm
axbom
PRO
1
1.1k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
2
78
Transcript
DDDお悩み相談事例 シーズン1 かとじゅん(@j5ik2o)
作る対象やその規模にかかわらず、DDDは有用か? • 有用。一般的には何らかの問題を 解決するのがシステムの目的。ゆえ にドメインが存在しないシステムは ありえないと考えて差し支えない。 • ただし、業務システムに対するプレ ゼンテーションの役割を果たすシス テムでは、CRUDが主目的になるこ
とがある 帳票システム 業務システム 業務の結果をCRUDする Command Query ドメイン リードモデル イベント
フロントエンドはDDDと関係ないのでは? • ビジネスロジックがサーバサイドだけにある なら、フロントエンドは完全なユーザインター フェイス層。しかし、クライアントサイドにもド メインロジックはありえる • たとえば、オークションサイトなら出品物の 落札期限が文字列表現としてREST APIな
どのレスポンスで返ってくるので、クライアン トはそのまま表示します。しかし落札までの 残り時間はクライアントで計算しなければな りません 出品ドメイン オブジェクト 出品DTO 落札期限 出品ビュー 出品ドメイン オブジェクト 落札残り時間 クライアント サーバ
DDDに共通の課題感があってそれを乗り越えた方法の 一つがCQRSだったのか? • GregさんがCQRS and Event Sourcingのアイ デアを公表したのが2010年ぐらい。コミュニティ でも盛り上がったのは2011年。 •
Chatworkでは2016年末にKafka, HBase, Akkaを使ってEvent Sourcingシステムをリリー スしている。 • Akkaでは分散システム上でEvent Sourcingを 実装する手段を提供している ◦ akka-persistence ◦ akka-cluster-sharding • event store(https://eventstore.org/) が選択 肢のひとつ
レガシーシステムへのDDD導入方法は? • 「コアドメインの中で仕事をする」・「ユビキタス言語を作って使う」・「モデルを実装に 反映する」の三本柱。どれが掛けてもよくない。局所的でも三本柱を立てる。例え ば、リファクタリングなら、ユニットに閉じて三本柱を立てる • レガシーシステムの改善にはDDD以外の考え方が必要。「レガシーシステム改善 ガイド」読みましょう。改善の道はリファクタリング→リアーキティング→リライトの階 段を登る。いきなりリライトではない •
実装のミクロな視点でいえば、データとロジックを統合して値オブジェクト化を進め る。数量はただのIntではない。電話番号はただのStringではない。ビジネスルー ルに基づく計算能力を持つオブジェクトという前提に立つ
売上リポジトリ DAOとリポジトリの違いは? • DAOはDBのテーブルの行をI/O する責務。リポジトリは生成済み の集約の参照を取得したり削除す るための責務。 • 集約とテーブルが一対一対応して いても責務としては異なる。集約
はどんな永続化技術からも中立 • ビジネスロジックに入出力に関係 する知識を含めない。責務重複の 回避 売上集約 売上エンティティ 売上詳細 ローカルエンティティ 売上DAO 売上レコード 売上詳細レコード 売上詳細DAO 永続化責務から解放さ れなければならない
おしまい