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
56
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DDD実践のFB
DDD実践の問題点のFB
rirazou
December 18, 2019
More Decks by rirazou
See All by rirazou
recommended-collection-object.pdf
rirazou
0
92
Other Decks in Programming
See All in Programming
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
1
370
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
200
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
260
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.3k
VibeCodingからAgenticWorkflowへ
starfish719
0
940
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
230
仕様駆動開発の消費期限
watany
20
9.1k
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
290
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
500
源内ハンズオン概要編
hideg
0
220
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
2
450
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
400
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1369
210k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
480
How to train your dragon (web standard)
notwaldorf
97
6.8k
Visualization
eitanlees
152
17k
The Cult of Friendly URLs
andyhume
79
7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
How to build a perfect <img>
jonoalderson
1
5.9k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Docker and Python
trallard
47
4.2k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Chasing Engaging Ingredients in Design
codingconduct
0
290
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の実践での問題点 解決案