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
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DDDお悩み相談事例 シーズン1
かとじゅん
September 06, 2019
More Decks by かとじゅん
See All by かとじゅん
TAKTでAI駆動開発の品質を設計する
j5ik2o
9
2k
終盤で崩壊させないAI駆動開発
j5ik2o
5
3.3k
CQRS/ESになぜアクターモデルが必要なのか
j5ik2o
0
2.3k
メッセージ駆動が可能にする結合の最適化
j5ik2o
11
7.3k
曖昧なプロンプトでも正しいコードが書ける理由
j5ik2o
0
540
AIコーディングエージェントの現実と設計品質の重要性
j5ik2o
0
170
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
17
8.4k
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
8
1.7k
メッセージとイベントを中核に置いたシステム設計の有用性について
j5ik2o
12
4.5k
Other Decks in Programming
See All in Programming
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
380
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
220
What's New in Android 2026
veronikapj
0
260
Cloudflare is Agents
chimame
0
170
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
410
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
110
in-process GraphQL のすすめ #ginzajs
izumin5210
2
980
Flow は今どうなっているか
mizdra
PRO
0
590
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
440
AIを紡ぐPMのお話
swdtkuy
0
110
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
290
Foundation Models frameworkで画像分析
ryodeveloper
1
620
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
340
Utilizing Notion as your number one productivity tool
mfonobong
4
550
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.1k
Believing is Seeing
oripsolob
1
190
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
250
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
350
Navigating Team Friction
lara
192
16k
The Curious Case for Waylosing
cassininazir
1
460
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
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 永続化責務から解放さ れなければならない
おしまい