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
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
240
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
340
How STYLIGHT went responsive
nonsquared
100
6.2k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
190
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Prompt Engineering for Job Search
mfonobong
0
330
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
310
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
600
Paper Plane
katiecoart
PRO
1
51k
Typedesign – Prime Four
hannesfritz
42
3.1k
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ͬͯϫʔΫ͠·͢
ऴΘΓ