Slide 1

Slide 1 text

ઓུతClient-DDD iOSϥϯνษڧձ 2018/04/25 @to4iki 1

Slide 2

Slide 2 text

Agenda • DDDʹ͍ͭͯ(ઓུͷ؍఺Ͱͬ͟ͱઆ໌) • ΫϥΠΞϯταΠυͰ༗ޮͳͷ͔ߟ͑Δ • ·ͱΊ 2

Slide 3

Slide 3 text

DDD 3

Slide 4

Slide 4 text

DDD = ϨΠϠʔυΞʔΩςΫνϟͱ͍͏ೝࣝ͸ޡղΛੜ͡Δ DDDͷຊ౰ͷࢫຯ͸"ઓུ໘"ʹ͋Δ 4

Slide 5

Slide 5 text

υϝΠϯۦಈઃܭ Domain Driven Design 5

Slide 6

Slide 6 text

DDDͱ͸ • υϝΠϯϞσϧΛத৺ʹߟ͑Δઃܭࢥ૝ • DDD͸ݴ༿Λେ੾ʹ͢Δઃܭࢥ૝ • XP(ΠϯΫϦϝϯλϧͳઃܭ) + OO(ΦϒδΣΫτࢦ޲) • OOP > DDD ݪ఺ճؼͳ͚ͩɻैདྷͷԆ௕ઢ্ʹ͋Δ΋ͷ 6

Slide 7

Slide 7 text

DDDͷ໨త͸ ιϑτ΢ΣΞͷ֩৺ʹ͋Δ ෳࡶੑͱઓ͏ࣄ 7

Slide 8

Slide 8 text

8

Slide 9

Slide 9 text

ۜͷ஄ؙͰ͸ͳ͍ • ΦϒδΣΫτࢦ޲ઃܭͷݪཧओٛΛओு͢Δઃܭख๏Ͱ͸ͳ ͍ɻ఻౷తͳ͍͔ͭ͘ͷߟ͑ํΛجʹɺڧௐ͢Δ఺ΛͣΒͯ͠ ͍Δ • DDD͕޲͔ͳ͍৔໘΋΋ͪΖΜ͋Δ 9

Slide 10

Slide 10 text

DDDͷҙٛ1 • Ϗδωεͷઐ໳Ո(υϝΠϯΤΩεύʔτ)ͱ։ൃऀΛ ಉ͡౔ඨʹ৐ͤΔࣄ Ͱɺ։ൃऀͷࢹ఺͚ͩͰͳ͘Ϗδωεଆͷࢹ఺΋౿·͑ͨιϑτ΢ΣΞ Λ࡞ ΕΔΑ͏ʹ͢Δ • ͦͷιϑτ΢ΣΞͷ֓೦Λཧղ͍ͯ͠ΔͷҰ෦ͷਓ(͍͍ͨͯ͸։ൃऀ)ͨͪͩ ͚ͱ͍͏ঢ়گΛͳ͘͢ • υϝΠϯΤΩεύʔτͱ։ൃऀɺιϑτ΢ΣΞͦͷ΋ͷͱͷؒͰɺ௨༁Λෆ ཁͱ͢Δ 1 Θ͔ΔʂυϝΠϯۦಈઃܭ ʙ΋ͪͪ͜ΌΜͷେ๯ݥʙʲC91৽ץʳ 10

Slide 11

Slide 11 text

FYI: ͱ͔͔ͬΓʹ ઓུతDDDͷࢫຯ͕؆ܿʹॻ͔Ε͍ͯΔ 11

Slide 12

Slide 12 text

υϝΠϯͱ͸ʁ • ιϑτ΢ΣΞΛར༻͢Δਓͨͪͷ׆ ಈ"ͱ"ؔ৺ࣄ" • ιϑτ΢ΣΞͷ֩৺͸υϝΠϯʹؔ܎ ͨ͠໰୊ΛϢʔβͷͨΊʹղܾ͢Δೳ ྗͰ͋Δ2 • ͍ΘΏΔۀ຿ྖҬ(ιϑτ΢ΣΞͰղܾ ͍ͨ͠໰୊) 2 ΤϦοΫɾΤϰΝϯεͷυϝΠϯۦಈઃܭ 12

Slide 13

Slide 13 text

ex. ϞϯελʔΛ౗͠ɺ Ϩϕϧ্͕͕ΔήʔϜͷυϝΠϯ(ۀ຿ྖҬ)Λߟ͑ͯΈΔ 13

Slide 14

Slide 14 text

ϞϯελʔϋϯλʔGO(Ծ)ͷυϝΠϯ • ϓϨΠϠʔ͸ϞϯελʔΛ౗͢ • Ϟϯελʔͷ࢟͸ARٕज़ʹΑͬͯΧϝϥʹөͬͨ෩ܠʹ߹੒͞ ΕΔ • Ϟϯελʔͷ࢟͸ݱ࣮ੈքʹଘࡏ͢Δ͔ͷΑ͏ʹݟ͑ɺྟ৔ײ ͕͋Δ 14

Slide 15

Slide 15 text

ϢϏΩλεݴޠ 15

Slide 16

Slide 16 text

͍ͭͰ΋ɾͲ͜Ͱ΋ɾ୭Ͱ΋ ࢖͑Δݴ༿ 16

Slide 17

Slide 17 text

ϢϏΩλεݴޠ 17

Slide 18

Slide 18 text

ϢϏΩλεݴޠ͕ແ͍ͱ • ϏδωεαΠυͱ։ൃऀͱͰಉ͡ࣄΛผʑʹݴ͍׵͍͑ͯͨΓ • ઐ໳༻ޠͷ௨༁ऀ͕ඞཁʹͳΔ • => ίετ͕ߴ͍ɺਖ਼֬ੑ΋๡͘͠ɺ଎౓΋஗͍ 18

Slide 19

Slide 19 text

ڞ௨ݴޠج൫Λ࢖ͬͯ௨༁Λແ͘͢ Ոܭ฽αʔϏεͷ৔߹ͷυϝΠϯͱͦΕҎ֎ - ⭕ Պ໨ຖͷຖ݄ͷ߹ܭֹۚΛूܭͰ͖Δ - ❌ Ոܭ฽ͷฤूཤྺΛHISTORYςʔϒϧʹอଘ͢Δ - ⭕ ࢒ֹ͸ཌ݄ʹ܁ΓӽͤΔ 19

Slide 20

Slide 20 text

ϢϏΩλεݴޠ͕ղܾ͢ΔྖҬ • ೝࣝͷࠩҟΛ཈͑ΔͨΊʹɺڞ௨ݴޠΛج൫ͱ͢Δɻ͜ͷݴޠ ͸νʔϜͷ࡞ۀͷࢸΔॴʹଘࡏ͢Δ • Ұ੾ͷ௨༁Λෆཁ͠ɺυϝΠϯʹର͢ΔཧղΛΑΓεϜʔζͳ ΋ͷʹ͢Δ • ཧ૝͸Ϣʔβʔ͕࢖͏ݴ༿(ex. χίχίͷੜओɺεϨओ) 20

Slide 21

Slide 21 text

͓·͚: ڥք͚ͮΒΕͨίϯςΩετ(BC) ΞΧ΢ϯτͬͯԿͰ͔͢ʁ Ϣʔβʔೝূͷ͜ͱΛࢦ͢ͷ͔ͳ 21

Slide 22

Slide 22 text

͓·͚: ڥք͚ͮΒΕͨίϯςΩετ(BC) • ݸਓͷه࿥(ใࠂॻ)ͱͯ͠ͷΞΧ΢ϯτ(จֶίϯςΩετ) • ޱ࠲ͱͯ͠ͷΞΧ΢ϯτ(ۜߦίϯςΩετ) • BCͷҧ͍ʹΑΓϞσϧ(ϢϏΩλεݴޠͷҙຯ߹͍)͕ҟͳΔ 22

Slide 23

Slide 23 text

ϞϯελʔϋϯλʔGO(Ծ)ͷϢϏΩλεݴޠ • ϓϨΠϠʔ, ϋϯλʔ • ౗͢, ङΔ 23

Slide 24

Slide 24 text

ϞϯελʔϋϯλʔGO(Ծ)ͷυϝΠϯ࠶ߟ • ϋϯλʔ͸ϞϯελʔΛङΔ • Ϟϯελʔͷ࢟͸ݱ࣮ੈքʹଘࡏ͢Δ͔ͷΑ͏ʹݟ͑Δ 24

Slide 25

Slide 25 text

͜ͷݴ༿ͷ௨Γʹɺίʔυʹ൓ө͢Δ ϋϯλʔ͸ϞϯελʔΛङΔ ↓ ϋϯλʔ(Hunter)Ϟσϧ͸Ϟϯελʔ(Monstor) ΛङΔ(hunt)ͱ͍͏ৼΔ෣͍Λ࣋ͭ 25

Slide 26

Slide 26 text

υϝΠϯͷ஌ࣝ΍ৼΔ෣͍Λந৅Խ ͨ͠ͷ͕υϝΠϯϞσϧ 26

Slide 27

Slide 27 text

υϝΠϯϞσϧ • ಛఆͷਤͰ͸ͳ͘ɺਤ͕఻͑Α͏ͱ͢ Δߟ͑ํΛࣔͨ͠΋ͷ 3 • Ϟσϧ͸ϓϩδΣΫτʹܞΘΔਓʑͷ ಄ͷதͰߏங͞Εͨ֓೦ͷू·Γ 3 ࣮ફυϝΠϯۦಈઃܭ 27

Slide 28

Slide 28 text

͜͜·Ͱͷ·ͱΊ(খٳܜ) • DDD: υϝΠϯϞσϧΛத৺ʹߟ͑Δઃܭࢥ૝ • υϝΠϯ: ૊৫͕ߦ͏ࣄۀʹΑͬͯղܾ͍ͨ͜͠ͱ = ۀ຿ • υϝΠϯϞσϧ: υϝΠϯͷ஌ࣝ΍ৼΔ෣͍Λந৅Խͨ͠΋ͷ • ϢϏΩλεݴޠ: ͍ͭͰ΋ɾͲ͜Ͱ΋ɾ୭Ͱ΋࢖͑Δݴ༿ 28

Slide 29

Slide 29 text

ຊ୊ Ͱ͸ɺΫϥΠΞϯταΠυͷ (υϝΠϯ)Ϟσϧʹ͍ͭͯߟ͑ͯΈΔ 29

Slide 30

Slide 30 text

ΫϥΠΞϯταΠυϓϩάϥϛϯάͷ ओ໨త͸ʁ 30

Slide 31

Slide 31 text

ΫϥΠΞϯταΠυϓϩάϥϛϯάͷ೉͍͠఺ 1. APIϨεϙϯεΛͲͷΑ͏ʹViewʹ൓ө͢Δ͔ 2. ෳࡶʹՄม͠͏Δσʔλͷঢ়ଶΛͲͷΑ͏ʹViewʹ൓ө͢Δ͔ 3. ཧ૝తͳUI/UXΛͲͷΑ͏ʹViewʹ൓ө͢Δ͔(࣮ݱ͢Δ͔) 31

Slide 32

Slide 32 text

ΫϥΠΞϯτϓϩάϥϛϯάͷ೉͠͞ͷ8ׂͰ͋Γ׌ͭओ໨త͸ɺ ͲͷΑ͏ʹඳը͢Δ͔ (Viewʹ൓ө͢Δ͔)ͩͱࢥ͏ 32

Slide 33

Slide 33 text

΋͏Ұճ ΫϥΠΞϯταΠυͷϞσϧͬͯԿͩʁ 33

Slide 34

Slide 34 text

34

Slide 35

Slide 35 text

ΫϥΠΞϯταΠυͷϞσϧ(1/2) • ❌ APIͷϨεϙϯεΛϚοϐϯάͨ͠ܕ • ❌ APIͷϨεϙϯεΛඳըʹదͨ͠ܗࣜʹม׵ͨ͠DTO • ⭕ αʔόαΠυ͕σʔλ૚ʹͳ͍ͬͯΔ৔߹͸ɺΫϥΠΞϯτ ʹυϝΠϯϞσϧΛఆٛ͢Δ • ⭕ ΫϥΠΞϯτଆ͚ͩͰӬଓԽΛߦ͏৔߹͸ɺΫϥΠΞϯτʹ υϝΠϯϞσϧΛఆٛ͢Δ 35

Slide 36

Slide 36 text

ΫϥΠΞϯταΠυͷϞσϧ(2/2) • ! ෳࡶੑͷղܾͷͨΊʹΫϥΠΞϯτʹαʔόαΠυͷυϝΠ ϯϞσϧͷίϐʔ͕͍ͯ΋ྑ͍ʁ • ! αʔό͔Βड͚औͬͨσʔλΛϦϚοϓͯ͠ΫϥΠΞϯτଆ ʹओಋݖΛ࣋ͨͤΔઃܭͳΒυϝΠϯϞσϧΛΫϥΠΞϯτ͕ ࣮૷ͯ͠΋ྑ͍ʁ 36

Slide 37

Slide 37 text

! ෳࡶੑͷղܾͷͨΊʹΫϥΠΞϯτʹ(αʔόαΠυͷίϐʔͷ) υϝΠϯϞσϧ͕͍ͯ΋ྑ͍ʁ 37

Slide 38

Slide 38 text

(લఏ)֤αʔόαΠυͷίϯςΩετΛవΊͯѻ͏Ϋϥ ΠΞϯτ5 5 https://motida-japan.hatenablog.com/entry/2017/10/16/183508 38

Slide 39

Slide 39 text

υϝΠϯϞσϧΛ࣋ͬͯ΋ྑ͍৔߹(1/2) ίϯςΩετͷ౷߹ΛΫϥΠΞϯτ಺Ͱߦ͏ 39

Slide 40

Slide 40 text

υϝΠϯϞσϧΛ࣋ͬͯ΋ྑ͍৔߹(2/2) ΦϑϥΠϯͰ΋ಈ͘͜ͱΛอূ͢Δ 40

Slide 41

Slide 41 text

υϝΠϯϞσϧΛ࣋ͨͳͯ͘΋ྑ͍৔߹ ΫϥΠΞϯτͰ͸ҰͭͷίϯςΩετ͔͠ѻΘͳ͍ 41

Slide 42

Slide 42 text

͜͜·Ͱͷ·ͱΊ • ΫϥΠΞϯτϓϩάϥϛϯά͸Ͳ͏ඳը͢Δ͔͕ओ໨త • ΫϥΠΞϯταΠυͰͷυϝΠϯϞσϧ͸ɺඞཁʹͳΔέʔε ͸έʔεόΠέʔε • ෳࡶͳ৔߹ = ෳ਺ͷίϯςΩετʹ·͕ͨΔΞϓϦέʔγϣϯ Λ࡞Δ৔߹ɺΫϥΠΞϯτʹ΋υϝΠϯϞσϧ͸͍ͯ΋ྑ͍(͍ Δ΂͖) 42

Slide 43

Slide 43 text

શମͷ·ͱΊ • Ϟσϧ(ۀ຿)͸φϚϞϊɺมԽ͢ΔͷͰߟ͑ҭͯͯߦ͘ͷ͕େࣄ • αʔόɾΫϥΠΞϯτؔ܎ͳࣗ͘෼͕ͨͪܞΘΔۀ຿ʹؔ৺Λ ࣋ͪऔΓ૊Ή͜ͱͰɺΑΓྑ͍Ϟσϧ͕ੜ·ΕΔ 43

Slide 44

Slide 44 text

Thanks 44

Slide 45

Slide 45 text

SeeAlso • https://speakerdeck.com/j5ik2o/domeinqu-dong-she-ji-ji-chu- jiang-zuo-zhan-lue-bian • https://www.slideshare.net/hirokishigemura9/ruby-ddd • http://y-anz-m.blogspot.jp/2017/03/droidkaigi-2017_9.html • http://y-anz-m.blogspot.jp/2018/02/android.html 45