Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
DDDお悩み相談事例 シーズン1
かとじゅん
September 06, 2019
Programming
3
880
DDDお悩み相談事例 シーズン1
かとじゅん
September 06, 2019
Tweet
Share
More Decks by かとじゅん
See All by かとじゅん
EIPとAkkaについて
j5ik2o
3
1.2k
モデルを中心にデザイン(設計)すること
j5ik2o
1
650
ドメインイベントの観点から再考するソフトウェア設計
j5ik2o
15
5k
セキュリティのためのソフトウェア設計について
j5ik2o
3
1.2k
AWS Dev Day 2021 - AWSでスケーラビリティとレジリエンスを実現するアーキテクチャを考える
j5ik2o
2
1.1k
AWSでCQRS Event Sourcing するにはどうすればいいのか
j5ik2o
7
2.5k
ChatworkDevDay_リアクティブシステムと次世代基盤について_加藤
j5ik2o
2
930
リアクティブシステムとCQRS/ESで実現する Chatwork新アーキテクチャについて
j5ik2o
5
1.8k
ざっくりCQRS/Event Sourcingを解説する
j5ik2o
15
6.2k
Other Decks in Programming
See All in Programming
#JJUG_CCC 「サポート」は製品開発? - JDBCライブラリ屋さんが実践する攻めのテクニカルサポートとJavaエンジニアのキャリアについて -
cdataj
0
410
個人開発でReact Native + Expo製アプリを作った話
ryonakae
1
450
Jetpack Compose, 어디까지 알고 있을까?
jisungbin
0
100
React NativeアプリにStorybook CSF3.0を導入しよう
texmeijin
0
160
Improving Developer Experience Through Tools and Techniques 2022
krzysztofzablocki
0
440
Reactアプリケーションのテスト戦略
0906koki
10
4.6k
LINE Messaging APIの概要 - LINE API総復習シリーズ
uezo
0
140
Seleniumでイキってたらサーバを絞め落としかけてた話
kenfujita
0
360
Scrum Fest Osaka 2022/5年で200人になったスタートアップの アジャイル開発の歴史とリアル
atamaplus
1
810
trocco® の品質を守る、とても普通な取り組み
kekekenta
0
350
言語処理ライブラリ開発における失敗談 / NLPHacks
taishii
1
430
Maintaining Software Correctness
dlew
PRO
3
240
Featured
See All Featured
Writing Fast Ruby
sferik
612
57k
Testing 201, or: Great Expectations
jmmastey
21
5.4k
5 minutes of I Can Smell Your CMS
philhawksworth
196
18k
Stop Working from a Prison Cell
hatefulcrawdad
261
17k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
224
49k
Statistics for Hackers
jakevdp
781
210k
Fontdeck: Realign not Redesign
paulrobertlloyd
73
4.1k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
315
19k
BBQ
matthewcrist
74
7.9k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
181
15k
What's new in Ruby 2.0
geeforr
336
30k
How GitHub (no longer) Works
holman
296
140k
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 永続化責務から解放さ れなければならない
おしまい