Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
新卒向けDDD(+ 要件定義/分析)研修資料
Search
s10myk4
September 20, 2018
360
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
新卒向けDDD(+ 要件定義/分析)研修資料
s10myk4
September 20, 2018
More Decks by s10myk4
See All by s10myk4
プロダクトオーナー向けユースケース駆動開発入門
s10myk4
0
430
Compile Time DIのススメ
s10myk4
3
1.3k
ユースケース駆動開発入門 (理論・実践編)
s10myk4
10
4.3k
Scalaの線形化と抽象型メンバーの統一のジレンマ
s10myk4
3
1.2k
Featured
See All Featured
Side Projects
sachag
456
43k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
The agentic SEO stack - context over prompts
schlessera
0
940
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
710
A better future with KSS
kneath
240
18k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
440
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
670
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Transcript
৽ଔDDDݚम גࣜձࣾηϓςʔχɾΦϦδφϧ Լଜ๎೭ 2018/06/15
ΞδΣϯμ ▸ υϝΠϯۦಈઃܭ(DDD)ͱʁ ▸ ෳࡶͱʁ ▸ ιϑτΣΞʹ͓͚Δෳࡶੑ ▸ ͳͥઃܭΛ͢Δͷ͔ʁ ▸
ιϑτΣΞͷઃܭͱʁ ▸ DDD͕ѻ͏ຊ࣭ ▸ ෳࡶ͞ͱཱ͔ͪ͏ಓ۩ͨͪ ▸ ·ͱΊ
લఏ ▸ ϓϩμΫτ։ൃͨ͜͠ͱͳ͍ਓ(ઃܭͷ؍͕ͳ͍)͕ɺ DDDΛཧղ͢Δͷ͓ͦΒ͘ແཧͩͱࢥ͏ɻ ▸ νʔϜͰ։ൃ͢Δ্Ͱ࠷ݶඞཁͩͱࢥΘΕΔࣝΛΠϯϓο τ͢Δ ▸ ਖ਼ղͳ͍ɺਖ਼ղͷͳ͍ෳࡶͳʹཱ͔ͪ͏ͨΊͷख ஈͰ͋Δ
▸ ࠓޙɺઃܭͱ͔ͷษڧ͢Δ্Ͱͷ؍Λर͑ͯΒ͑ͨΒخ ͍͠
ߨٛͷత ▸ ͳͥDDDΛ͍ͯ͠Δͷ͔Λతཧղ͢Δ ۜͷؙͰͳ͍ ▸ DDD͕ͨΒ͢Ձ(ͬ͘͟Γͱ) ▸ ιϑτΣΞ։ൃʹ͓͍ͯɺઃܭཁ݅ੳ͕ ͲΕ΄Ͳॏཁ͔Λײͯ͡Β͑Εྑ͍ ▸
طଘͷνʔϜʹೖΔͷʹ࠷ݶඞཁͱࢥΘΕΔ֓೦ΛΔ
·ͣߨٛΛฉ্͘Ͱɺඞ ཁͳ༻ޠΛΔ
༻ޠ ▸ υϝΠϯ ▸ ίΞυϝΠϯ ▸ αϒυϝΠϯ ▸ ϢϏΩλεݴޠ
υϝΠϯͱʁ ▸ ٛʹɺ৫͕ߦ͏ࣄۀ ͦΕΛऔΓר͘ੈք ͦͷࣄۀྖҬʹͯۀΛਐΊ͍ͯͨ͘Ίͷํ๏ ▸ ࠂӡ༻Λࣄۀͱ͍ͯ͠Εɺͦͷࠂӡ༻ͷۀ ͕ࣝυϝΠϯ
ίΞυϝΠϯͱαϒυϝΠϯ ▸ υϝΠϯͦͷࣄۀྖҬશମΛදͨ͠ΓɺҰ෦Λදͨ͠Γ༷ʑ ͳͷͰɺ ۩ମతʹίΞυϝΠϯɺαϒυϝΠϯͱ͚ͯݺ ΜͩΓ͢Δ ▸ ৫શମͷυϝΠϯෳͷαϒυϝΠϯΛΈ߹Θͤͯɺ ࣮ݱ͞ΕΔΠϝʔδ
ίΞυϝΠϯͱαϒυϝΠϯͱ͔
ϢϏΩλεݴޠ ▸ νʔϜͰڞ༗͢Δݴޠ ▸ ΤϯδχΞಉ࢜Ͱ ςετ ͱݴͬͨΒɺςετίʔυͱ ͍͏ಉ͡ೝ͕ࣝͰ͖Δ ▸ ߴߍੜಉ࢜Ͱ
ςετ ͱݴͬͨΒɺظςετͳͲͷಉ ͡ೝ͕ࣝͰ͖Δ
υϝΠϯۦಈઃܭͱʁ ▸ ιϑτΣΞͷઃܭख๏ ▸ ίΞͱͳΔϏδωείϯηϓτͷৗʹਐԽ͢ΔϞσϧʹର͠ ࣮ͯΛਂ݁͘ͼ͚ͭΔ͜ͱʹΑͬͯɺ ෳࡶͳཁٻʹରԠ͢ΔιϑτΣΞΛ։ൃ
͋Μ·Γϐϯͱདྷͳ͍ʁ
ͦͦɺෳࡶͱԿʁ
ΫωϏϯϑϨʔϜϫʔΫ ▸ ෆ҆ఆੑɺෆ࣮֬ੑɺෳࡶੑɺᐆດੑ ͷ૿ͨ͠ੈքʹ͓͍ ͯɺ࣮ࡍͷੈքΛͲͷΑ͏ʹͱΒ͑ͯɺͲͷΑ͏ʹߟ͑ͯߦ ಈͨ͠Β͍͍͔Λମܥ͚ͮͨͷ
ෳࡶͱɺਖ਼ղΛಘΔ͜ ͱ͕Θ͔Βͳ͍ঢ়گ
୯७͔ʁෳࡶ͔ʁ ▸ அ͢Δํ๏େ·͔ʹ2ͭ ▸ ݁ՌతʹෳࡶͩͬͨͱΘ͔Δ ▸ ੳݕূΛ͢Δ
ෳࡶͳঢ়گ ▸ ·ͣઐՈ͕࣮ݧͰਫ਼ࠪͯ͠ɺͦͷޙɺײͯ͠ରԠ͢Δ ͜ͱ͕ٻΊΒΕΔ ▸ YouTube͜ͷྫͰॳࠓͷΘΕํΛఆͯ͠ͳ͔ͬͨ ▸ ࣮ੈք΄ͱΜͲ͕͜ͷΑ͏ͳෳࡶͳυϝΠϯ ▸ ࠓقͷചΓ্͛ݮগͷݪҼɺܦӦਞͷ৽ͷҙࢥܾఆ
etc ▸ ϏδωεࢢΧελϚʔͳͲ༷ʑͳཁૉʹΑͬͯࣄͷ ଊ͑ํҟͳΔͷͰ͢ɻ
ϏδωεؚΊɺେମ৭Μ ͳͷͦΕͳΓʹෳࡶ
୯७ʹ͢ΔͨΊʹɺ୯७ Խ͢ΔͨΊͷྗ͕ඞཁ
ෳࡶ͞ͷதͷཁૉΛղ ͯ͠ɺ୯७ͳཁૉʹͯ͠ ͍͘͜ͱ͕ඞཁʹͳΔ
ιϑτΣΞ։ൃͰɺ େ·͔ʹઃܭ͕ͦͷׂ ΛՌͨ͢
ઃܭͱʁ ▸ ࡞Δલʹɺސ٬ͷཁٻ੍݅Λ۩ମԽ͠ɺ ͲͷΑ͏ͳͷΛ࡞Δ͔ͷܭըΛ۩ମԽ͠ɺސ٬ͷཁٻΛຬ ͔ͨ͢Λݕ౼͢Δ͜ͱ
͠ઃܭΛ͠ͳ͔ͬͨΒʁ ▸ ՈΛ৽͘͠ݐͯΔ߹ͷྫ͑
ιϑτΣΞΛઃܭ͢Δ্Ͱߟྀ͖͢؍(Ұ෦) ▸ ֦ுੑ - ج൫ͱͳΔΞʔΩςΫνϟʹେ͖ͳมߋΛՃ͑Δ͜ͱͳ͘ɺ৽ͨͳػೳΛՃͰ͖Δ͜ͱɻ ▸ ؤ݈ੑ - ߴෛՙঢ়ଶෆਖ਼ͳೖྗ͕͋ͬͯಈ࡞͢Δ͜ͱɻྫ͑ɺ༻ՄೳͳϝϞϦྔ͕গͳͯ͘ಈ ࡞͢ΔΑ͏ઃܭ͢Δɻ
▸ ৴པੑ - ͋ΔҰఆظؒ·Ͱɺಛఆͷࠔͳঢ়ଶʹͳͬͯɺػೳ͢Δ͜ͱɻ ▸ োੑ - ίϯϙʔωϯτͷো͕ൃੜͯ͠ɺͦΕʹ͑ͨΓɺճ෮ͤͨ͞ΓͰ͖Δ͜ͱɻ ▸ ηΩϡϦςΟ - ѱҙ͋Δߦҝʹରͯ͠ੑ͕͋Δ͜ͱɻ ▸ อकੑ - ͋ΔҰఆ࣌ؒͰɺಛఆͷঢ়ଶʹ෮ؼͰ͖Δ͜ͱɻྫ͑ɺΞϯνΠϧειϑτͷΑ͏ʹɺఆظ తͳߋ৽͕ՄೳͰ͋ΔͳͲɻ ▸ ޓੑ - ଞͷͱ૬ޓʹΓͱΓͰ͖Δ͜ͱɻ͋Δ͍ɺաڈͷସ͖͢ͱޓͰ͋Δ͜ͱɻ ▸ Ϟδϡʔϧੑ - ϞδϡʔϧੑΛߟྀͨ͠ઃܭɻͦΕʹΑͬͯอकੑ্͢Δɻ։ൃʹ͓͍ͯίϯϙʔ ωϯτ୯ҐͰ࣮͠ςετՄೳͳͲͷར͕͋Δɻ·ͨɺ։ൃ࡞ۀͷׂ͕༰қʹͳΔɻ ▸ ࠶ར༻ੑ - Ϟδϡʔϧੑ͕Α͚ΕɺݸʑͷίϯϙʔωϯτΛଞͷ໘Ͱ࠶ར༻Ͱ͖ΔՄೳੑ͕ੜ͡Δɻ (wikiࢀর ιϑτΣΞઃܭ)
͜ͷΑ͏ͳࢦඪΛߟྀͯ͠ ઃܭͯ͠Δ
ͲͷΑ͏ʹߟྀͯ͠ઃܭ͍ͯ͠Δ͔ʁ ▸ ιϑτΣΞ͕࣮ݱ͢ΔϏδωεͷಛੑɺࢢಛੑɺސ٬ ͷཁͳͲͷཁૉʹΑͬͯɺ ͕ࣗͨͪ࡞ΔιϑτΣΞʹ͓͍ͯ`Կ͕ΑΓॏཁͳͷ͔` Λߟྀ͢Δ
ྫ1 ▸ ࢢ͕ٸܹʹ͍ͯ͠ΔͷͰɺࣗͨͪͷϏδωεٸܹ ʹ͢Δ͔͠Εͳ͍Մೳੑ͕ߴ͍ -> ιϑτΣΞͷ`֦ுੑ` `Ϟδϡʔϧੑ` ͕ߴ͍ઃܭΛద༻
͍ͨ͠
ྫ2 ▸ ۚમͷΓऔΓݸਓใΛѻ͏αʔϏεͷͨΊɺαʔϏ εʹର͢Δ৴པ҆৺Λอͭ͜ͱ͕ॏཁͰ͋Δ -> `ηΩϡϦςΟ` `อकੑ` `োੑ` ʹର͢Δߴ͍ιϦϡʔ
γϣϯΛιϑτΣΞͷઃܭʹద༻͍ͨ͠
ઃܭʹ͓͚Δ2ͭͷ؍ ▸ γεςϜશମઃܭ(ΞʔΩςΫνϟ) ରͱͳΔϏδωευϝΠϯͷಛੑΛଊ͑ͯɺιϑτΣΞΛશମΛઃܭ͢Δ ▸ ػೳͷઃܭ(ཁ݅ఆٛ) ▸ ֓೦ઃܭ(ͲΜͳͷΛ࡞Δ͔۩ମԽ͢Δ) ࣮ݱ͍ͨ͠ػೳͷᐆດ͞ΛऔΓআ͘ɺͦͷதͷ۩ମతͳ֓೦Λ໌֬ʹ͢Δ ಛఆͷٕज़ʹґଘͤͣʹɺγεςϜ͕ػೳཁٻΛͲͷΑ͏ʹ࣮ݱ͢Δ͔Λ໌֬ʹ͢Δ
▸ ৄࡉઃܭ(ͲͷΑ͏ʹ࡞Δ͔) ֓೦ઃܭʹΑ֤ͬͯʑͷ֓೦͕ͲͷΑ͏ʹؔ࿈ͯ͠ɺػೳ͕࣮ݱ͞ΕΔͷ͔͕Θ͔ͬ ͨͷͰɺͦΕΛٕज़తʹͲͷΑ͏ͳํ๏Ͱߦ͏͔Λ۩ମతʹ͢Δ
γεςϜશମͷઃܭ ͱ ཁ݅ఆٛ ͦΕͧΕͰDDD͕ՁΛͨΒ͢
γεςϜશମͷઃܭʹDDD͕ͨΒ͢Ձ ▸ ཁٻ ͱ ࣮ͱͷؒͷᐆດ͞Λղফ͢Δ ▸ ֓೦ઃܭʹΑͬͯɺཁٻ͕ͲͷΑ͏ʹ࣮ݱ͞ΕΔͷ͔Λ۩ ମԽ͢Δ͜ͱͰɺཁٻΛ࣮ݱ͢ΔͨΊʹඞཁͳυϝΠϯ ࣝ֓೦Λཧղ͢Δ ▸
ۀΛߦͳ͍ͬͯΔਓͷϝϯλϧϞσϧΛଊ͑ͯɺͦΕΛ࣮ ʹམͱ͠ࠐΉ͜ͱͰɺ ▸ ςετ͕͍͢͠ɺΤϥʔ͕ൃੜ͠ʹ͍͘ɺٻΊΒΕΔ ࣭Λຬͨ͢(SLA)
ཁ݅ఆٛʹDDD͕ͨΒ͢Ձ ▸ Ϗδωεͷಛੑɺ࣮ݱ͍ͨ͠ՁΛΤϯδχΞ͕ղऍ͢Δ͜ͱͰɺ ޮతͳશମઃܭΛ࣮ݱ͢Δ (ओʹඇػೳཁٻɺอकੑɺηΩϡϦςΟɺύϑΥʔϚϯεɺ֦ுੑ etc) ▸ தظతͳϏδωεͷมԽɺʹରͯ͠ɺγεςϜ૬ରతʹ ͍ίετͰػೳͷՃɾมߋɾ֦ுΛ࣮ݱ͢Δ (υϝΠϯϞσϧΛίʔυམͱ͠ࠐΉͨΊ)
▸ Ϗδωεͷʹରͯ͠ɺγεςϜಉ༷ʹεέʔϧ͢Δ͜ͱΛ ͍ίετͰ࣮ݱ͢Δ (γεςϜ͕εέʔϧ͢ΔʹɺεέʔϧͰ͖ΔΑ͏ʹߟྀͯ͠ઃܭ ͍ͨ͠ͱͰ͖ͳ͍)
DDD͕ѻ͏ຊ࣭ ▸ ࠷ॏཁͳෳࡶ͞ɺυϝΠϯ(Ϣʔβʔ׆ಈɺϏδωε)ͦ ͷͷ ▸ ͦΕʹରͯ͠ମܥతʹཱ͔ͪ͏खஈ ▸ ෳࡶͳυϝΠϯΛ࣮ݱ͢ΔͨΊͷɺٕज़తͳෳࡶ͞ʹରͯ͠ ιϦϡʔγϣϯΛ༩͑Δ ઓུతઃܭπʔϧͱઓज़తઃܭπʔϧ
HOWʹઓज़తઃܭπʔϧ ▸ DDDͲͷΑ͏ʹ࡞Δ͔(How)ʹɺπʔϧఏڙ ▸ ΤϯςΟςΟ ▸ ΦϒδΣΫτ ▸ ू ▸
ϦϙδτϦ ▸ αʔϏε ▸ ϑΝΫτϦ ▸ ΞʔΩςΫνϟ …etc
͜͜·Ͱͷ࣭ٙԠ
ࣄલʹͬͨݱঢ়ͷ՝ ▸ model͕ͨͩͷσʔλͷೖΕʹͳͬͯ͠·͍ͬͯͨͷͰɺclassʹৼΔ͍͕ͳ ͍ঢ়ଶɻ ▸ ίϯτϩʔϥʔͷϝιου͕େ͖͘ͳ͍ͬͯΔɻ ▸ ·ͨίϯτϩʔϥʔपΓͰͷvalidation͕͍ɻ ▸ DTODAOΛͲ͜ʹ࡞Εྑ͍͔
▸ modelͰͳ͘ɺinfraapplicationͰඞཁʹͳΔDTODAOͦΕͧΕඞཁ ʹͳΔInfraɺapplicationͰ࡞͍ͬͯΔ͕ɺԿ͔ΞυόΠε͕͋Εཉ͍͠ɻ ▸ ύοέʔδ͚ΛͲͷΑ͏ʹߦ͑ྑ͍͔ ▸ ໊લ͚ͭ ▸ ཁΛ͖͍ͯཁ݅ʹམͱ͠ࠐΉ࡞ۀ͕͏·͘ߦ͍͑ͯͳ͍
DTOɺDAOͬͯԿʁ ▸ modelͰͳ͘ɺinfraapplicationͰඞཁʹͳΔDTO DAOͦΕͧΕඞཁʹͳΔInfraɺapplicationͰ࡞ͬ ͍ͯΔ͕ɺԿ͔ΞυόΠε͕͋Εཉ͍͠ɻ ▸ ʓʓDTOɺDAOͦΕͧΕͷׂʹ͍ͭͯߟ͑ͯΈΑ ͏
େ͖ͳίϯτϩʔϥʔ ▸ ίϯτϩʔϥʔͷϝιου͕େ͖͘ͳ͍ͬͯΔɻ ▸ ·ͨίϯτϩʔϥʔपΓͰͷvalidation͕͍ɻ ▸ model͕ͨͩͷσʔλͷೖΕʹͳͬͯ͠·͍ͬͯͨͷͰɺ classʹৼΔ͍͕ͳ͍ঢ়ଶɻ ▸ ࣮ࡍͷίʔυΛݟͯΈΑ͏
▸ ͜͜Ͱɺ͖ͬ͞ߟ͑ͨͦΕͧΕͷׂͷཱ͕ͭͷͰʁ
ͦͷଞ ▸ ύοέʔδ͚ΛͲͷΑ͏ʹߦ͑ྑ͍͔ ▸ ͳΜͷͨΊʹύοέʔδΛ͚Δͷ͔Λߟ͑ͯΈΔ ▸ ໊લ͚ͭ ▸ ϦʔμʔϒϧίʔυΛಡΈ·͠ΐ͏
ཁΛ͖͍ͯཁ݅ʹམͱ͠ࠐΉ࡞ۀ͕͏·͘ߦ͍͑ͯͳ͍ ▸ ࣮ࡍͷϢʔβʔετʔϦʔΛऔΓ্͛ͯҰॹʹཁٻੳɺ ༧උઃܭ·ͰΛߦ͏ ▸ ҰॹʹͬͯΈΑ͏ ▸ 2HͬͯϫʔΫ͠·͢
ऴΘΓ