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
(なんとなくわかった気になれる)ドメイン駆動設計の概要
Search
honodera
February 05, 2017
Programming
5
980
(なんとなくわかった気になれる)ドメイン駆動設計の概要
社内勉強会にて発表した、
ドメイン駆動設計に全く触れたことがない人向けに作成したスライドです。
honodera
February 05, 2017
Tweet
Share
More Decks by honodera
See All by honodera
ドメイン駆動設計 コンテキストマップについて
honodera
0
1.1k
Other Decks in Programming
See All in Programming
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
130
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
Python札幌 LT資料
t3tra
7
1.1k
Implementation Patterns
denyspoltorak
0
140
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
240
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
8
2.2k
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
140
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
180
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
160
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
180
Basic Architectures
denyspoltorak
0
160
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
150
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Claude Code のすすめ
schroneko
67
210k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
35
Measuring & Analyzing Core Web Vitals
bluesmoon
9
720
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
Heart Work Chapter 1 - Part 1
lfama
PRO
3
35k
エンジニアに許された特別な時間の終わり
watany
106
220k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
730
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Transcript
υϝΠϯۦಈઃܭͷ֓ཁ
υϝΠϯۦಈઃܭͬͯ ͳΜͰ͔͢ʁ
OO + XP = DDD
OO+XP=υϝΠϯۦಈઃܭ • ʮυϝΠϯۦಈઃܭʯʮΦϒδΣΫτࢦʯͱʮΤΫε τϦʔϜϓϩάϥϛϯάʯͷ߹Θٕͤ ˠΤΫετϦʔϜͳΦϒδΣΫτࢦϓϩάϥϛϯά • ΤϰΝϯεͬͯਓ͕OO+XPͰͬͯΈֶͯΜͩ͜ͱΛ·ͱ Ίͨͷ • ʮυϝΠϯۦಈઃܭʯOOʴXPͷߟ͑ํɺΓํ͕ϕʔ
εͰɺͦͷதͰʮڧௐ͢Δ(ॏ͖Λஔ͍͍ͯΔ)ʯ͕͋Δ
υϝΠϯۦಈઃܭ͕ڧௐ͢Δ • ʮυϝΠϯͷࣝʯͷܧଓతͳֶश ˠҰճ࡞ͬͯऴΘΓ͡Όͳ͍ • ʮݴ༿ʯΛͬͨʮϞσϦϯάʯ ˠΈΜͳͰ͠߹ͬͯ߹ҙ͠Α͏ • ʮϞσϧʯͱʮίʔυʯΛҰகͤ͞Δ ˠίʔυΛಡΊۀ͕Θ͔Δతͳ
͜ͷ̏ͭΛॏࢹͯ͠ιϑτΣΞΛ։ൃ͢Δͷ͕ ʮυϝΠϯۦಈઃܭʯ
ΦϒδΣΫτࢦ... ΤΫετϦʔϜ ϓϩάϥϛϯά...
ΦϒδΣΫτࢦ(ઃܭ) ͬͯͳʹʁ
ΦϒδΣΫτࢦͬͯ • ʮσʔλʯͱʮॲཧʯΛҰ·ͱΊʹͨ͠ʮΦϒδΣΫτʯಉ͕࢜ϝοηʔδΛૹͬͯ ૬खͷॲཧϧʔνϯΛݺͼग़͢ܗࣜͰιϑτΣΞͷ։ൃΛߦ͍ͬͯ͘ํ๏ٴͼߟ ͑ํɻ(ωοτ͔Βίϐϖ) • ंͱ͔Ͱྫ͕͑ͪ(ΦϒδΣΫτࢦ͋Δ͋Δ)ɻ ͔͠͠ۀͱ͔͚Ε͍ͯΔͨΊɺ ͳΜ͔Πϝʔδ͠ʹ͍͘? •
σʔλͱͦͷσʔλΛ͏ϩδοΫɺҰͭͷΫϥεʹ·ͱΊΔ • ҰͭҰͭͷΦϒδΣΫτͷׂ୯७ʹ͢Δ • ෳࡶͳॲཧΦϒδΣΫτΛΈ߹Θ࣮ͤͯݱ͢Δ • 1ΫϥεԿߦҎɺ1ϝιουԿߦҎͱ͔͍͏ࡉ͔͍ࣄ͜͜ͰׂѪ • ίʔυ͕ॏෳ͠ͳ͍͔ΒҰՕॴ͚͍͍ͩͤɺςετָ͕ʹͳΔ→อकੑ͕ߴ͘ͳ Δ
XP(ΤΫετϦʔϜϓϩ άϥϛϯά)ͬͯʁ
XPͬͯͲΜͳͷ • ιϑτΣΞཁٻ༷ͷมߋͳͲͷมԽʹରͯ͠ػහʹର Ԡ͢Δ • ॳظஈ֊ͷઃܭΑΓίʔσΟϯάͱςετΛॏࢹ͢Δ • υΩϡϝϯτΑΓιʔείʔυΛॏΜ͡Δ • ֤ఔΛஈ֊తʹਐΊ͍ͯ͘ΑΓɺৗʹϑΟʔυόοΫ
Λߦͬͯमਖ਼ɾ࠶ઃܭ͍ͯ͘͠ϓϩηεΛॏࢹ͢Δ • 4ͭʹྨͨ͠12ͷϓϥΫςΟε(͜ͷͰ্هͷߟ͑ํ ͕ͳΜͱͳ͘Θ͔Ε͍͍ͷͰɺৄࡉׂѪ)
DDDͰ ։ൃ͢Δత...
OOͰมߋ༰қੑΛߴΊΔ XPͰมԽద༻ੑΛߴΊΔ (OO͕XPΛࢧ͑Δɻ૬ޓ ʹิڧ͋͠͏)
࣮ࡍͲΜͳײ͡Ͱ։ൃ͢Δͷʁ
͜Μͳײ͡Ͱ ᶃ • ϓϨθϯςʔγϣϯ / ΞϓϦ / σʔλιʔε / υϝΠ
ϯʹ͚Δ ɹ→্هͷϨΠϠͰΞϓϦΛ࡞ͯ͠ɺυϝΠϯʹஔ͘υ ϝΠϯϞσϧʹۀͷؔ৺ࣄΛू͢Δ • ۀࢹͰϞσϧΛ࡞Δɺۀϧʔϧ(Ճɺஅɺܭࢉ)ɺ ۀ༻ޠΛ͏ ɹ→υϝΠϯҎ֎ʹࢄΒͬͨۀϩδοΫυϝΠϯ ʹدͤΔ
͜Μͳײ͡Ͱ ᶄ
͜Μͳײ͡Ͱ ᶅ
͖͔ͬ͞ΒυϝΠϯͱ͍ͬͯΔ
υϝΠϯͬͯԿ͔Ͷʁ
υϝΠϯ • ιϑτΣΞΛར༻͢Δਓୡͷʮ׆ಈʯͱʮؔ৺ࣄʯ ˠιϑτΣΞͷར༻ʮ׆ಈʯͷҰ෦ ˠؔ৺ࣄͷযϏδωεۀ্ͷՌ • ιϑτΣΞΛ࡞Δ׆ಈˠυϝΠϯͰͳ͍ • ίϯϐϡʔλͷΈڍಈˠυϝΠϯͰͳ͍ •
ը໘༷ɺػೳҰཡɺϢʔβετʔϦʔˠυϝΠϯͰ ͳ͍
͖͔ͬ͞ΒυϝΠϯϞσϧ ͱ͍ͬͯΔ
υϝΠϯϞσϧͬͯԿ͔Ͷʁ
υϝΠϯϞσϧ
Ϟσϧ • େͳࣝΛʮཁʯͨ͠ɺγϯϓϧͰ͔ Γ͍͢આ໌ͨ͠ͷ • ϞσϦϯάͷεΩϧʹʮཁྗʯ ॏཁͳཁૉΛൃݟ͢Δྗ ຊ࣭తͰͳ͍ͷΛΔྗ ݫີʹΈཱͯΔྗ
υϝΠϯϞσϧ • ιϑτΣΞΛར༻͢Δਓͨͪͷʮ׆ಈʯͱ ʮؔ৺ࣄʯͷຊ࣭Λ؆ܿʹදͨ͠ͷ ؔ৺ࣄ...ۀࣝɺۀϧʔϧ • දݱ νʔϜͰަΘ͢ձɺϥϑεέονɺίʔυɺ (จষਤ)ۀͷؔ৺ࣄ
Ͳ͏ͬͯ υϝΠϯ(υϝΠϯϞσϧ) Λఆ͍ٛͯ͘͠ͷʁ
None
υϝΠϯͷࣝΛטΈࡅ͘ • υϝΠϯͷॏཁͳؔ৺ࣄΛཧղ͢Δ • υϝΠϯΤΩεύʔτʢۀΛख़͍ͯ͠Δ ਓʹ͓٬༷ɺར༻ऀʣͷΛฉ͍ͯཧղ͢Δ • ݴ͍͑ΔͳΒཁ݅ఆٛͬͯײ͡Ͱ͠ΐ͏͔
None
ݴ༿Λͬͨҙਤͷୡ • ཧղͨ͠υϝΠϯͷࣝΛجʹυϝΠϯϞσϧΛ࡞Δ • ར༻ऀʹͱͬͯͷॏཁͳؔ৺ࣄΛཧղͨ͠ͷΛཧɺ ཁ͠Ϟσϧʹ͢Δ • ϝϯόʔͰڞ௨ͷཧղΛ͢Δ͜ͱɺಉҙ͢Δ͜ͱ͕େࣄ • ϝϯόʔ͕ಉ͡ݴ༿Ͱཧղ͢Δ͜ͱ͕େࣄ
ˠϢϏΩλεݴޠ • υΩϡϝϯτͷΘΓʹձ͢Δɻͦ͜Ͱग़͖ͯͨݴ༿ ͕Ϋϥε໊ϝιου໊ʹͳΔ
None
Ϟσϧͱ࣮Λ݁ͼ͚ͭΔ • ۀαʔϏεͷ࣮ߦͱͳΔ ʮۀతͳʯஅ /ʮۀతͳʯܭࢉ /ʮۀత ͳʯՃͷ݁ՌΛฦ͢ • ۀͷؔ৺ࣄΛநσʔλܕͱͯ͠දݱ͢Δ ސ٬ΫϥεɺΫϥεɺจΫϥεɺྔ
ΫϥεɺظΫϥε...
Ϟσϧͱ࣮Λ݁ͼ͚ͭΔ • ۀͷʮΓ͍ͨ͜ͱʯɺʮΓ͍ͨ͜ͱʯ ΛΫϥε໊ͱϝιου໊Ͱදݱ͢Δ • ࣮ͷৄࡉҙࣝ͠ͳ͍ɺҙࣝͤ͞ͳ͍ ˠ෦ͷσʔλߏͱϩδοΫΛݟͤͳ͍ɻ ͦͷΫϥεͷͦͷϝιουΛݺͼग़͓ͯ͠ ࣄΛͯ͠Β͏
υϝΠϯͷʮִʯ͕ॏཁ • ۀࣝͷଞͷͷ·͗ΕࠐΈΛ͙ →ϓϨθϯςʔγϣϯʹଘࡏ͢Δۀϧʔϧ(Ϗϡʔఆٛͷifจ) →ଠͬͨαʔϏεΫϥε τϥϯβΫγϣϯεΫϦϓτ(1ϢʔεέʔεΛ1ϝιουͰશ෦ Δɺίʔυ͕ॏෳ͢Δ) σʔλͷೖΕ͚ͩͷυϝΠϯͷΫϥε →σʔλͷۀࣝ(where۟ಈతsqlʹଘࡏ͢ΔۀϩδοΫ) →ςʔϒϧͷ۠ϑϥά(Ξϯνύλʔϯͷๅݿ)→ͪΌΜͱϞσϧ
ʹ͢Δ
ऴΘΓ • ϢϏΩλεݴޠɺϨΠϠʔԽΞʔΩςΫνϟ DDDͷϕετϓϥΫςΟεͷύλʔϯ(͜Εͬͨ Β͏·͍͔͘͘Α)ͷҰͭɻ • ߹॓Ͱߦͳ͏ίϯςΩετϚοϓͷ࡞ͦͷύ λʔϯͷҰͭɻ(υϝΠϯΛΑ͠ͳʹྨ͍ͯ͘͠) ※ίϯςΩετϚοϓͷઆ໌ผεϥΠυͰ
Ҿ༻ݩ • ૿ాږࢯͷDDDؔ࿈ͷεϥΠυ http://www.slideshare.net/masuda220