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実践のFB
Search
rirazou
December 18, 2019
Programming
0
33
DDD実践のFB
DDD実践の問題点のFB
rirazou
December 18, 2019
Tweet
Share
More Decks by rirazou
See All by rirazou
recommended-collection-object.pdf
rirazou
0
61
Other Decks in Programming
See All in Programming
Regular Expressions, REXML, Automata Learning
makenowjust
0
220
Rubyとクリエイティブコーディングの輪の広がり / The Growing Circle of Ruby and Creative Coding
chobishiba
1
270
Some more adventure of Happy Eyeballs
coe401_
2
190
実践!難読化ガイド
mitchan
0
240
Amazon BedrockでサーバレスなAIお料理ボットを作成する!!
tosuri13
0
230
エラーレスポンス設計から考える、0→1開発におけるGraphQLへの向き合い方
bicstone
5
1.5k
大公開!iOS開発の悩みトップ5 〜iOSDC Japan 2024〜
ryunakayama
0
190
watsonx.ai Dojo #2 生成AIを使ったアプリ開発入門編
oniak3ibm
PRO
0
240
Rechartsで楽にゴリゴリにカスタマイズする!
10tera
1
170
GraphQL あるいは React における自律的なデータ取得について
quramy
11
3k
KSPの導入・移行を前向きに検討しよう!
shxun6934
PRO
0
290
[DroidKaigi 2024] Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜 / From Android View to Jetpack Compose: A Guide to Migration
syarihu
1
680
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
89
16k
A better future with KSS
kneath
235
17k
KATA
mclloyd
27
13k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
103
48k
The World Runs on Bad Software
bkeepers
PRO
64
11k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
29
2.6k
The Mythical Team-Month
searls
218
43k
Into the Great Unknown - MozCon
thekraken
29
1.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
26
3.9k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.2k
Large-scale JavaScript Application Architecture
addyosmani
508
110k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
43
2k
Transcript
DDD実践のFB ドメインモデリング勉強会 2019/12/18 @rirazou_ 1
自己紹介 • @rirazou_ • 好きな食べ物:寿司、焼き肉、ラーメン、鶏の唐揚げ • 嫌いな食べ物:パクチー • 技術的な興味:開発系は全般的に、最近は設計 •
その他の興味:息子の成長 • 最近のはなし:痩せない(食ってるから) 2
本日のアジェンダ 3 本日お話しすること DDDの実践での問題点 解決案
本日のアジェンダ 4 本日お話しすること DDDの実践での問題点 解決案
本日お話しすること - モデリングというよりは実装よりの話になります - 現プロジェクトにおける簡易DDDの実践にて、 特に困った問題についてお話しします - 簡易DDDよりな実践のため分析が 根本的に足りてないという事はあります 5
本日のアジェンダ 6 本日お話しすること DDDの実践での問題点 解決案
DDDの実践での問題点 プロジェクトで何が起こったのか? - 画面の関心毎に引っ張られ過ぎて、 ドメインモデルの崩壊した。 - 集約を安易に取り扱い、巨大な集約を作ってしまい、 速度面で問題になることも多かった - 速度面の改善に取り組む中で、集約を歪めてしまい
さらなるドメインモデルの崩壊がおきた 7
DDDの実践での問題点 それで何が困るのか? - 1つのモデルが様々な関心毎を扱っている状態になり、 1つの修正がどう影響するのか読み取りずらくなった。 - 開発の後期になればなるほど、修正のコストが増加していく ※自動テストのメンテナンスも全然追いついてないので そう言った問題点は別でありました 8
DDDの実践での問題点 なぜそんなことが起こるのか? - 各画面で必要な情報が異なる - 1つの画面でも複数のモデルが必要になる - 複数のモデルの属性を組み合わせて表示したりする - 画面は顧客の要求を具現化しているので、情報の組合せが複雑
9
DDDの実践での問題点 そもそもドメインモデルが扱う事って? - そのドメインにおけるルールなどのビジネスロジックや プロセスなどのドメインの活動そのものを扱う - ドメインの活動から発生したシステムに対する 要求のユースケースをモデリングしたいわけではない ユースケースに使われるドメイン活動をモデリングしたい 10
DDDの実践での問題点 じゃあ画面が扱う事って? - ドメインが持つ情報を最適化して表示し、 人々の意思決定をサポートする - 意思決定を行った後の次のアクションへ入り口を提供し、 ドメインの活動を次へと進める - 要求を満たすため、それをサポートするために存在している
11
DDDの実践での問題点 結局は何が言いたいの? ドメインモデルは要求というよりは、 要求の向こう側にあるものをモデリングしたい 画面は要求そのものを実現したい ドメインが持つ情報は画面と密接にかかわってはいるが、 画面の関心毎とは別軸にあるものではないのか? ドメインモデルは画面から遠ざけたほうが良いのでは? もちろん、分析のスタートは要求や画面、帳票などになるが 今見えているそれらをドメインだと勘違いしない方がよいのでは?
12
本日のアジェンダ 13 本日お話しすること DDDの実践での問題点 解決案
解決案 ① 戦略的設計をちゃんとやろうぜ ② CQRSをやろうぜ ※時間がないので端折りますので、知らない人は調べてください。 14
解決案 ① 戦略的設計をちゃんとやろうぜ はい、すみません。その通りです。頑張ります。 振り返ると自分が出会った問題のほとんどは ドメインエキスパートを含めて ドメイン自体の活動自体を分析すれば 解決できたように感じています。 15
解決案 ② CQRSをやろうぜ CQRSとは、リードモデルとライトモデルを分けるやり方 - リードモデルは、データを読み取る操作を担当 UIの関心毎で構造化される - ライトモデルは、データを更新する操作を担当 ドメインモデルの役割との相性が良い
16
解決案 CQRSをする上で、 - デメリットが無いわけではない - 分けることで発生する複雑さもある - 常にリードモデルとライトモデルは分ける必要はない - 素で使えるなら使えばいい
- 複雑化しそうなら分ける選択肢を持つということが大事 17
本日のアジェンダ 18 本日お話しすること DDDの実践での問題点 解決案
まとめ 19 - UIはドメインそのものではなく、 ドメインをサポートするためのものではないのか? - 関心毎が異なるのであれば、分けるのが良いのではないか? - CQRSという解決策が生み出されているので、 実践する場では選択肢として考慮してみては?
- 戦略的設計を頑張ります。おれ。
質疑応答 - 本日のアジェンダ 20 本日お話しすること DDDの実践での問題点 解決案