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
970
(なんとなくわかった気になれる)ドメイン駆動設計の概要
社内勉強会にて発表した、
ドメイン駆動設計に全く触れたことがない人向けに作成したスライドです。
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
Thank you <💅>, What's the Next?
ahoxa
1
590
Fiber Scheduler vs. General-Purpose Parallel Client
hayaokimura
1
290
インプロセスQAにおいて大事にしていること / In-process QA Meetup
medley
0
140
20250426 GDGoC 合同新歓 - GDGoC のススメ
getty708
0
110
By the way Google Cloud Next 2025に行ってみてどうだった
ymd65536
0
110
一緒に働きたくなるプログラマの思想 #QiitaConference
mu_zaru
78
20k
Empowering Developers with HTML-Aware ERB Tooling @ RubyKaigi 2025, Matsuyama, Ehime
marcoroth
2
950
監視 やばい
syossan27
12
10k
VitestのIn-Source Testingが便利
taro28
8
2.4k
API for docs
soutaro
3
1.6k
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
150
実践Webフロントパフォーマンスチューニング
cp20
45
10k
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Optimizing for Happiness
mojombo
378
70k
It's Worth the Effort
3n
184
28k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
119
51k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
21k
How STYLIGHT went responsive
nonsquared
100
5.5k
Being A Developer After 40
akosma
91
590k
How to Ace a Technical Interview
jacobian
276
23k
Scaling GitHub
holman
459
140k
Documentation Writing (for coders)
carmenintech
71
4.7k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
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