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
ミツバEX
September 04, 2018
Technology
1.7k
1
Share
ざっくりわかるDDD (戦術的のみ)
部活の制作合宿で発表したスライドです.
ミツバEX
September 04, 2018
More Decks by ミツバEX
See All by ミツバEX
20180903制作合宿
mitubaex
0
390
20160514 逆求人イベント
mitubaex
0
200
20171001 逆求人イベント
mitubaex
0
240
Gitハンズオン勉強会の資料
mitubaex
0
2.7k
YouをTubeする男
mitubaex
0
760
Other Decks in Technology
See All in Technology
Loadbalancing exporter internals
ymotongpoo
1
110
GCASアップデート(202603-202605)
techniczna
0
220
オライリーイベント登壇資料「鉄リサイクル・産廃業界におけるAI技術実応用のカタチ」
takarasawa_
0
420
アプリブロック機能のつくりかたと、AIとHTMLの不合理な相性の良さについて
kumamotone
1
260
ワールドカフェ再び、そしてゴール・ルール・ロール・ツール / World Café Revisited, and the Goals-Rules-Roles-Tools
ks91
PRO
0
180
Databricks 月刊サービスアップデートまとめ 2026年04月号
tyosi1212
0
130
Directions Asia 2026 | Beyond Buildable AI Agents: Let’s Visualize Partner Value in the AI Era
ryoheig0405
0
110
AWS運用におけるAI Agent活用術 / JAWS-UG 神戸 #11 LT大会
genda
1
300
20260515 ⾃分のアカウントとプライバシーを守る認証と認可の話〜利⽤者向け〜
oidfj
0
760
CARTA HOLDINGS エンジニア向け 採用ピッチ資料 / CARTA-GUIDE-for-Engineers
carta_engineering
0
47k
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.6k
マンション備え付けのネットワークとLTE回線を組み合わせた ネットワークの安定化の考案
harutiro
1
140
Featured
See All Featured
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Fireside Chat
paigeccino
42
3.9k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
170
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The Language of Interfaces
destraynor
162
26k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
290
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
460
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Done Done
chrislema
186
16k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
510
Transcript
ͬ͘͟ΓΘ͔ΔDDD (ઓज़తͷΈ) ϛπό
ࣗݾհ • ϛπόʢM2ʣ • @EX46900521 • य़͔Β౦ژ • Haskell, Go
ࠓ͢͜ͱ • υϝΠϯۦಈઃܭͷงғؾ • Α͘ΘΕΔΞʔΩςΫνϟʢઓज़తDDDʣ • υϝΠϯۦಈઃܭͰɼؾΛ͚ͭΔ͜ͱ
ࠓ͞ͳ͍͜ͱ • υϝΠϯۦಈઃܭΛશʹཧղ͢Δ • ओʹϞσϦϯάͷ͠ͳ͍ʢઃܭͰ͕͜͜ॏཁʣ • ϞσϦϯάʹؔͯ͜͠ͷεϥΠυ͕Θ͔Γ͘͢ ͯΑ͞Έʹ͋;Ε͍ͯ·͢ɽ • https://speakerdeck.com/smdmts/ddd-for-
engineer-newbie
υϝΠϯۦಈઃܭͷඞཁੑ • มߋʹڧ͍ίʔυΛॻ͖͍ͨ • ϩδοΫΛͲ͜ʹஔ͔͘ʹରͯ͠ਅʹ ઓ͍ͬͯ͘
υϝΠϯ = ۀͷؔ৺ࣄ
υϝΠϯۦಈઃܭ = ۀͷؔ৺ࣄʹணͨ͠ ઃܭख๏
ۀͷؔ৺ࣄ • ྫɿ • ਓ͕͓ۚΛࣗͷޱ࠲ʹৼΓࠐΉ
ਓ͕ۚΛ͏
ਓ͕ۚΛࣗͷޱ࠲ʹৼΓࠐΉ 8IP 8IBU 8IBU 8IFSF
γεςϜ֎෦ͷಈ͖ ৼΓࠐΉ ৼࠐऴྃ ௨
γεςϜ෦ͷಈ͖
γεςϜ෦ͷಈ͖ γεςϜ σʔλϕʔε ৼࠐॲཧɼϢʔβใ֬ೝɼ ߴ֬ೝɽɽɽFUD
Q: ͜Εྑ͍ίʔυͰ͔͢ʁ
A: ͋·Γྑ͘ͳ͍ίʔυͰ͢
Կ͕ྑ͘ͳ͍ͷʁ
Α͘ͳ͍ • Ұͭͷϝιου͕ͨ͘͞Μͷ͜ͱΛ͗͢͠ • ςετ͕ॻ͖ͮΒ͍ • ͺͬͱݟͲ͕͜Ͳ͏ಈ͍͍ͯΔͷ͔Θ͔Γ ͮΒ͍
ͨ͘͞Μ͋ΔॲཧΛ͚Δ
ओͳϩδοΫ • ೝূ֬ೝ • ֹ͕ۚෆਖ਼Ͱͳ͍͔֬ೝʢҎ֎Ͱͳ͍ ͔ʣ • ৼࠐॲཧ • ߴ֬ೝ
ׂɿྑ͍ ݟ௨͠ɿѱ͍
ݟ௨͠ΛΑ͘͢ΔͨΊͷ ϨΠϠʔͷߟ͑ํ
σʔλͷྲྀΕ Ұํ
֤ϨΠϠʔͷׂ
Ϣʔβೖྗ σʔλͷ ܭࢉɼՃ σʔλͷӬଓԽ ͭͳ͗
ϨΠϠʔΛ͚ΔϝϦοτ • ίʔυͷஔ͖ॴΛ໌֬ʹܾΊΒΕΔ • ϩδοΫΛҰՕॴʹूதͯ͠ɼཧͰ͖Δ • ֤ϨΠϠʔͷؔΛૄ݁߹ʹอͯΔ
ઌ΄ͲͷίʔυΛϨΠϠʔ͚
ϑΝΠϧߏ
domain/MoneyΫϥε • ֹ͕ۚෆਖ਼Ͱͳ͍͔ͷఆΛMoneyΫϥε ʹҠ͢
domain/AuthenticationService • AuthΛߦ͏ॲཧΛAuthenticationServiceʹҠ ͨ͠
infra/MoneyRepository
application/TransferService
มߋޙ (TransferHandler)
ͪΐ͍εοΩϦͨ͠
͓͞Β͍
Ϣʔβೖྗ σʔλͷ ܭࢉɼՃ σʔλͷӬଓԽ ͭͳ͗
͏গ͠ϨΠϠʔ ͚ʹ͍ͭͯ
ૄ݁߹
ར༻ଆ͕ΠϯλʔϑΣʔεͷΈ Λ༻͍ɼ࣮ͱ͢Δ
Javaͷinterface
CatDogͷதΛΔඞཁ ͳ͘ɼશͯAnimalͰOK
RepositoryपΓͷ࣮ફతͳ
֤σʔλιʔεͷΓସ͑Λ ༰қʹͰ͖Δ
લͷ·ͱΊ • ϨΠϠʔߏʹͯ͠ɼॲཧΛׂ͠Α͏ • ΠϯλʔϑΣʔεͷΈΛఏڙ͠ɼϨΠϠʔؒ Λૄ݁߹ʹ
গ͠Λͯ͠
ਓ͕ۚΛࣗͷޱ࠲ʹৼΓࠐΉ 8IP 8IBU 8IBU 8IFSF
Ϟϊ • User • E-mail • UserName • ۚ •
੫ֹ
EntityͱValue Object • Entity • idΛ࣋ͪɼΦϒδΣΫτ͝ͱʹ۠ผ͞Ε͏Δ Ϟϊ • Value Object
• ͷΈΛ࣋ͪɼෆมͳΦϒδΣΫτ
Ϟϊ • User (Entity) • E-mail (Value Object) • UserName
(Value Object) • ۚ (Value Object) • ੫ֹ
ΈཱͯΔ (User)
ϑΝΠϧߏʢUserʣ
ϙΠϯτ • શͯͷมΛԿ͔͠ΒͷΫϥεͰϥοϓ͢Δ • IntegerܕStringܕͩͱԿΛҙຯ͍ͯ͠Δ ͔Θ͔ΓͮΒ͍
ूʢAggregateʣ
ू • Root EntityΛ࣋ͪɼͦͷԼʹෳͷEntity, Value ObjectΛ࣋ͭͰ͔͍υϝΠϯΦϒδΣ Ϋτ • ࠓճUser͕ू
ूͷϧʔϧ • ूҎԼͷΛࢀর͢Δͱ͖ඞͣRoot Entityʹ͍߹ΘͤΔ • Root Entity͕ͷීวੑΛอূ͢Δ
ͨ͘͞ΜͷΛҰͭͷ ΦϒδΣΫτʹԡ͠ࠐΊͯ ؔ৺͝ͱΛ෦ʹ
ΦϒδΣΫτࢦΤΫααΠζ
https://gist.github.com/ sambatriste/ 5535b1f0f6a73e9b37239d 86edf61c70
ϧʔϧ • 1ͭͷϝιουʹ͖ͭΠϯσϯτ̍ஈམ • else۟ېࢭ • ϓϦϛςΟϒܕͱจࣈྻܕϥοϓ͢Δ • Ұߦʹ͖ͭυοτҰͭ •
໊લলུ͠ͳ͍ • શͯͷΤϯςΟςΟΛখ͘͞ • 1ͭͷΫϥεʹ͖ͭɼΠϯελϯεมೋͭ·Ͱ • ϑΝʔετΫϥείϨΫγϣϯΛ༻͢Δ • Getter, Setter, ϓϩύςΟΛ༻͠ͳ͍͜ͱ
શͯͷΤϯςΟςΟΛখ͘͞ • 1ϑΝΠϧ50ߦ • 1ύοέʔδ10ϑΝΠϧ
ϑΝʔετΫϥείϨΫγϣϯ Λ༻͢Δ • ίϨΫγϣϯΛΫϥεͰϥοϓ͢Δ • ίϨΫγϣϯʹର͢ΔॲཧΛϝιουͰఆٛ Ͱ͖Δར͕͋Δ
Getter, SetterΛར༻͠ͳ͍ • ϩδοΫΛݺͿͷͰ͋ͬͯɼΛ͍߹ ΘͤΔཧ༝Λ࡞Βͳ͍Α͏ʹ͢Δ • ϩδοΫΛҙࣝతʹϞσϧʹ࣮͢ΔΑ͏ʹ ͳΔ
ΦϒδΣΫτࢦ ΤΫααΠζ
ޙͷ·ͱΊ • ϞϊΛҙࣝͯ͠ɼϞσϧΛ࡞͍ͯ͘͠ • ΦϒδΣΫτࢦΤΫααΠζͷ࣮ફʹΑΔ ΑΓׂ͞Εͨίʔυ
DDDͰؾΛ͚ͭΔ͜ͱ • υϝΠϯͷϩδοΫ͕ଞͷʹ࿙ΕΔՄೳ ੑ͕͋ΔͷͰҙ • υϝΠϯϞσϧҰேҰ༦ͷͰͳ͘ɼΏͬ ͘Γۛຯ͠ͳ͕Β։ൃΛ͢Δ͜ͱ͕େࣄ
·ͱΊ • ϨΠϠʔΛҙࣝ͠ɼॲཧΛׂ • ϩδοΫΛҙࣝͯ͠ɼҰՕॴʹूதͤ͞Δ • ΦϒδΣΫτࢦΤΫααΠζΛҙࣝ͢Δ
͓·͚
ϑϩϯτͷΞʔΩςΫνϟ • MVP • MVVM • Flux
MVP
MVVM
Flux https://www.google.co.jp/url?sa=i...
ϨΠϠʔʹ͚ͯؔ৺͝ͱͷ Λߦͳ͍ͬͯΔ
Atomic Design • UI ComponentsΛ5ͭͷϨϕϧʹ͚Δ • Atoms • Molecules •
Organisms • templates • Pages
Atomic Design https://cdn-images-1.medium.com/max/...
ࡉ͔͘UIΛ͚ͯɼσβΠφʔ ͷਓͱڞಉͰ࡞ۀ͘͢͢͠Δ
ؾ͕͍ͨΒʹ͚ͯ ։ൃͯ͠Έ͍ͯͩ͘͞