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
1.6k
ざっくりわかるDDD (戦術的のみ)
部活の制作合宿で発表したスライドです.
ミツバEX
September 04, 2018
Tweet
Share
More Decks by ミツバEX
See All by ミツバEX
20180903制作合宿
mitubaex
0
360
20160514 逆求人イベント
mitubaex
0
180
20171001 逆求人イベント
mitubaex
0
230
Gitハンズオン勉強会の資料
mitubaex
0
2.7k
YouをTubeする男
mitubaex
0
640
Other Decks in Technology
See All in Technology
「Chatwork」の認証基盤の移行とログ活用によるプロダクト改善
kubell_hr
1
200
Snowflake Summit 2025 データエンジニアリング関連新機能紹介 / Snowflake Summit 2025 What's New about Data Engineering
tiltmax3
0
320
Node-RED × MCP 勉強会 vol.1
1ftseabass
PRO
0
160
GeminiとNotebookLMによる金融実務の業務革新
abenben
0
240
怖くない!はじめてのClaude Code
shinya337
0
110
Amazon Bedrockで実現する 新たな学習体験
kzkmaeda
2
610
2年でここまで成長!AWSで育てたAI Slack botの軌跡
iwamot
PRO
4
780
Understanding_Thread_Tuning_for_Inference_Servers_of_Deep_Models.pdf
lycorptech_jp
PRO
0
140
"サービスチーム" での技術選定 / Making Technology Decisions for the Service Team
kaminashi
1
180
Leveraging Open-Source Tools for Creating 3D Tiles in the Urban Environment
simboss
PRO
0
110
AIエージェント最前線! Amazon Bedrock、Amazon Q、そしてMCPを使いこなそう
minorun365
PRO
15
5.4k
mrubyと micro-ROSが繋ぐロボットの世界
kishima
2
350
Featured
See All Featured
Visualization
eitanlees
146
16k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
710
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
GitHub's CSS Performance
jonrohan
1031
460k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Code Reviewing Like a Champion
maltzj
524
40k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
GraphQLとの向き合い方2022年版
quramy
49
14k
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Λ͚ͯɼσβΠφʔ ͷਓͱڞಉͰ࡞ۀ͘͢͢͠Δ
ؾ͕͍ͨΒʹ͚ͯ ։ൃͯ͠Έ͍ͯͩ͘͞