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
1.3k
3
Share
DDDお悩み相談事例 シーズン1
かとじゅん
September 06, 2019
More Decks by かとじゅん
See All by かとじゅん
終盤で崩壊させないAI駆動開発
j5ik2o
3
2.5k
CQRS/ESになぜアクターモデルが必要なのか
j5ik2o
0
1.9k
メッセージ駆動が可能にする結合の最適化
j5ik2o
10
6.4k
曖昧なプロンプトでも正しいコードが書ける理由
j5ik2o
0
500
AIコーディングエージェントの現実と設計品質の重要性
j5ik2o
0
150
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
17
8.2k
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
8
1.6k
メッセージとイベントを中核に置いたシステム設計の有用性について
j5ik2o
12
4.4k
私のキャリアの旅路: 技術をきっかけに変化を楽しむ
j5ik2o
3
1.1k
Other Decks in Programming
See All in Programming
ついに来た!本格的なマルチクラウド時代の Google Cloud
maroon1st
0
390
セグメントとターゲットを意識するプロポーザルの書き方 〜採択の鍵は、誰に刺すかを見極めるマーケティング戦略にある〜
m3m0r7
PRO
0
760
20260514 - build with ai 2026 - build LINE Bot with Gemini CLI
line_developers_tw
PRO
0
310
Explore CoroutineScope
tomoeng11
0
170
10 Tips of AWS ~Gen AI on AWS~
licux
5
540
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
1
660
PHPでバイナリをパースして理解するASN.1
muno92
PRO
0
430
Agentic Elixir
whatyouhide
0
440
AIと共に生きる技術選定 2026
sgash708
0
130
ソフトウェア設計の結合バランス #phperkaigi
kajitack
0
490
属人化しないコード品質の作り方_2026.04.07.pdf
muraaano
0
310
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
4
450
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.6k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
55k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
WENDY [Excerpt]
tessaabrams
10
37k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
290
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
430
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Balancing Empowerment & Direction
lara
6
1.1k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
240
Music & Morning Musume
bryan
47
7.2k
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 永続化責務から解放さ れなければならない
おしまい