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でリファクタリングしたら 幸せになりそうな予感がした
Search
sorch
December 23, 2020
Technology
1
290
アカウント発行システムをDDDでリファクタリングしたら 幸せになりそうな予感がした
sorch
December 23, 2020
Tweet
Share
More Decks by sorch
See All by sorch
他言語と比較して今こそ理解しよう! 目指せ、列挙型マスター!
soachr
0
260
おさらい!PHP8で廃止される機能
soachr
1
630
元Javaエンジニアが怖いと思うPHPの仕様
soachr
0
270
Other Decks in Technology
See All in Technology
ヒューリスティック評価を用いたゲームQA実践事例
gree_tech
PRO
0
490
生成AI時代に必要な価値ある意思決定を育てる「開発プロセス定義」を用いた中期戦略
kakehashi
PRO
1
270
ChatGPTとPlantUML/Mermaidによるソフトウェア設計
gowhich501
1
110
【 LLMエンジニアがヒューマノイド開発に挑んでみた 】 - 第104回 Machine Learning 15minutes! Hybrid
soneo1127
0
280
ヘブンバーンズレッドのレンダリングパイプライン刷新
gree_tech
PRO
0
500
研究開発と製品開発、両利きのロボティクス
youtalk
1
390
PRDの正しい使い方 ~AI時代にも効く思考・対話・成長ツールとして~
techtekt
PRO
1
1.8k
Bye-Bye Query Spaghetti: Write Queries You'll Actually Understand Using Pipelined SQL Syntax
tobiaslampertlotum
0
130
進捗
ydah
2
230
Vault meets Kubernetes
mochizuki875
0
250
フィンテック養成勉強会#56
finengine
0
110
LLM翻訳ツールの開発と海外のお客様対応等への社内導入事例
gree_tech
PRO
0
500
Featured
See All Featured
Faster Mobile Websites
deanohume
309
31k
Rails Girls Zürich Keynote
gr2m
95
14k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
KATA
mclloyd
32
14k
GitHub's CSS Performance
jonrohan
1032
460k
Done Done
chrislema
185
16k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
For a Future-Friendly Web
brad_frost
179
9.9k
Scaling GitHub
holman
463
140k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6.1k
Transcript
アカウント発行システムをDDDで リファクタリングしたら 幸せになりそうな予感がした @soachr (そーく) 設計・モデリング LT会 2020/12/23
@soachr(そーく)
今日話すこと
DDDのよさ is 仕様変更が圧倒的楽
社内の読書会で ドメイン駆動設計(DDD) と出会う https://booth.pm/ja/items/1835632
DDDやりたい
立ちはだかる壁
1. 10年以上ご愛顧いただいているサービスだからこそ発生する a. 追加仕様によるプログラムの肥大化&複雑化 b. 複雑すぎて誰も手が出せないプログラム 2. トランザクショナルなプログラム a. ビジネスロジックとデータ永続化が混在
b. 多い分岐・点在するコピペ処理
None
None
サービスに対してDDDは難しい けど...
サブシステムの アカウント発行システムなら 規模も小さい
アカウント発行システムを DDDでRe:モデリングしてみた
前提:アカウント発行システム • BtoB向けクラウドサービスのアカウント発行システムを想定 • アカウント発行時に契約したプラン・オプションを選択する 機能/プラン Premium Standard 機能A ◦
◦ 機能B ◦ ◦ 機能C ◦ - 機能D ※オプション ※オプション
アプリケーション層 =なにをするか(What)
ドメイン層 =どうやって実現するか (How) 機能/プラン Premium Standard 機能A ◦ ◦ 機能B
◦ ◦ 機能C ◦ - 機能D ※オプション ※オプション
DDDのよさ is 仕様変更が圧倒的楽
例:新しいプランを増設することになった 機能/プラン Premium Standard Lite 機能A ◦ ◦ ◦ 機能B
◦ ◦ - 機能C ◦ - - 機能D ※オプション ※オプション ※オプション
DDDじゃなかったら (トランザクショナルなら) • 設計・実装 ◦ 既存仕様理解&影響調査が大変 ▪ 大量にあるif分岐 ▪ 同じ変数による条件分岐が色々な場所に点在している
... ▪ ifとelseの処理がほぼ一緒でちょっとだけ違う ... • テスト ◦ 既存機能のデグレが怖い
None
DDDだったら • (ほぼ)1クラス追加するだけ
アプリケーション層は変更なし! 具体的にどうやってアカウントを発行するか はドメイン層に移譲しているため 変更点はなし 具体的にどうやってアカウントを発行するか の処理はドメイン層に移譲しているため 変更点はなし
None
おわりに • DDDでもっと楽できるはず! ◦ ”やること”を決めて”やり方”をビジネスの変化に伴って変えられる 設計 • サービスへのDDD適用は難しいかもしれないけれど、アカウント発行シ ステムなら手が出せそうかも!
ご清聴ありがとうございました