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
45
DDD実践のFB
DDD実践の問題点のFB
rirazou
December 18, 2019
Tweet
Share
More Decks by rirazou
See All by rirazou
recommended-collection-object.pdf
rirazou
0
77
Other Decks in Programming
See All in Programming
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
110
高度なUI/UXこそHotwireで作ろう Kaigi on Rails 2025
naofumi
4
3k
麻雀点数計算問題生成タスクから学ぶ Single Agentの限界と Agentic Workflowの底力
po3rin
5
2k
uniqueパッケージの内部実装を支えるweak pointerの話
magavel
0
880
そのpreloadは必要?見過ごされたpreloadが技術的負債として爆発した日
mugitti9
2
2.8k
GitHub Actions × AWS OIDC連携の仕組みと経緯を理解する
ota1022
0
230
ててべんす独演会〜Flowの全てを語ります〜
tbsten
1
220
気づいて!アプリからのSOS 〜App Store Connect APIで始めるパフォーマンス健康診断〜
waka12
0
260
XP, Testing and ninja testing ZOZ5
m_seki
1
210
10年もののAPIサーバーにおけるCI/CDの改善の奮闘
mbook
0
680
パフォーマンスチューニングで Web 技術を深掘り直す
progfay
18
4.8k
なぜGoのジェネリクスはこの形なのか? Featherweight Goが明かす設計の核心
ryotaros
7
1k
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Balancing Empowerment & Direction
lara
4
670
Code Review Best Practice
trishagee
72
19k
Navigating Team Friction
lara
189
15k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
A better future with KSS
kneath
239
17k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.7k
Designing Experiences People Love
moore
142
24k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Automating Front-end Workflow
addyosmani
1371
200k
Facilitating Awesome Meetings
lara
56
6.6k
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の実践での問題点 解決案