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
630
いかに開発効率と品質を高めるか: ドメイン駆動設計と組織パターンの視点から考える
j5ik2o
PRO
2
1.6k
社内のメンバーに「関数型プログラミングの学習・教育」についていろいろ聞いてみた
j5ik2o
PRO
1
1.4k
AWS データベースブログの記事 「Amazon DynamoDBによる CQRSイベントストアの構築」 を勝手に読み解く
j5ik2o
PRO
2
2k
EIPとAkkaについて
j5ik2o
PRO
3
2.2k
モデルを中心にデザイン(設計)すること
j5ik2o
PRO
2
2.2k
ドメインイベントの観点から再考するソフトウェア設計
j5ik2o
PRO
16
9.5k
セキュリティのためのソフトウェア設計について
j5ik2o
PRO
4
1.8k
AWS Dev Day 2021 - AWSでスケーラビリティとレジリエンスを実現するアーキテクチャを考える
j5ik2o
PRO
2
1.6k
Other Decks in Programming
See All in Programming
入門 AWS Amplify Gen2 / Introduction to AWS Amplify Gen2
genkiogasawara
1
330
Hanami and htmx
bkuhlmann
0
200
Git Lint
bkuhlmann
4
750
Nealle_Autify_LT_Slide202403
nealle
0
170
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
110
MicrosoftのPlatform Engineeringガイドを読んで実際になにかやってみた
ymd65536
1
280
Amazon SQSコンシューマー疎結合への旅 - 出張! #DevelopersIO IT技術ブログの中の人が語る勉強会 #3
quiver
0
230
新宿ダンジョンを可視化してみた
satoshi7190
2
230
エンターテイメント業界で利用されるAWS
demuyan
0
210
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.3k
What We Can Learn From OSS
inouehi
0
420
Ruby GitHub Packages
bkuhlmann
0
630
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
175
21k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Infographics Made Easy
chrislema
238
18k
Web development in the modern age
philhawksworth
202
10k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
30
6k
Building Your Own Lightsaber
phodgson
99
5.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
25
2.3k
Visualization
eitanlees
136
14k
Agile that works and the tools we love
rasmusluckow
325
20k
How to Ace a Technical Interview
jacobian
272
22k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
60
14k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
221
21k
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 永続化責務から解放さ れなければならない
おしまい