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
かとじゅん
PRO
September 06, 2019
Programming
3
1.1k
DDDお悩み相談事例 シーズン1
かとじゅん
PRO
September 06, 2019
Tweet
Share
More Decks by かとじゅん
See All by かとじゅん
私のキャリアの旅路: 技術をきっかけに変化を楽しむ
j5ik2o
PRO
3
640
いかに開発効率と品質を高めるか: ドメイン駆動設計と組織パターンの視点から考える
j5ik2o
PRO
2
1.7k
社内のメンバーに「関数型プログラミングの学習・教育」についていろいろ聞いてみた
j5ik2o
PRO
1
1.4k
AWS データベースブログの記事 「Amazon DynamoDBによる CQRSイベントストアの構築」 を勝手に読み解く
j5ik2o
PRO
2
2k
EIPとAkkaについて
j5ik2o
PRO
3
2.2k
モデルを中心にデザイン(設計)すること
j5ik2o
PRO
2
2.3k
ドメインイベントの観点から再考するソフトウェア設計
j5ik2o
PRO
16
9.6k
セキュリティのためのソフトウェア設計について
j5ik2o
PRO
4
1.8k
AWS Dev Day 2021 - AWSでスケーラビリティとレジリエンスを実現するアーキテクチャを考える
j5ik2o
PRO
2
1.6k
Other Decks in Programming
See All in Programming
Implementing Design Systems in Swift
seyfoyun
2
480
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
170
From Spring Boot 2 to Spring Boot 3 with Java 21 and Jakarta EE
ivargrimstad
0
710
新宿ダンジョンを可視化してみた
satoshi7190
3
410
Apache Hive 4 on Treasure Data
ryukobayashi
1
440
2 週間で Twitter Bot を作ってみた
contour_gara
0
790
TCAとKMPを用いた新規動画配信アプリ 「ABEMA Live」の設計
tomu28
2
130
AppRouter Panel Talk
yosuke_furukawa
PRO
1
480
ServerAction で Progressive Enhancement はどこまで頑張れるか? / progressive-enhancement-with-server-action
takefumiyoshii
6
460
Direct Style Effect Systems The Print[A] ExampleA Comprehension Aid
philipschwarz
PRO
0
160
JavaScript Closure
asoluka
0
310
Komplexe Oberflächen mit SVG und der Web Animation API
joergneumann
0
680
Featured
See All Featured
A Philosophy of Restraint
colly
197
16k
How STYLIGHT went responsive
nonsquared
92
4.8k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
245
20k
Happy Clients
brianwarren
92
6.4k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
9
1.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
221
21k
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
Designing on Purpose - Digital PM Summit 2013
jponch
111
6.5k
4 Signs Your Business is Dying
shpigford
176
21k
The Invisible Side of Design
smashingmag
294
49k
Infographics Made Easy
chrislema
238
18k
WebSockets: Embracing the real-time Web
robhawkes
59
7k
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 永続化責務から解放さ れなければならない
おしまい