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
s10myk4
September 20, 2018
350
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
410
Compile Time DIのススメ
s10myk4
3
1.3k
ユースケース駆動開発入門 (理論・実践編)
s10myk4
10
4.3k
Scalaの線形化と抽象型メンバーの統一のジレンマ
s10myk4
3
1.1k
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Building an army of robots
kneath
306
46k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
54k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
830
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
My Coaching Mixtape
mlcsv
0
140
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
150
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
380
Making Projects Easy
brettharned
120
6.7k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
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ͬͯϫʔΫ͠·͢
ऴΘΓ