Slide 1

Slide 1 text

ͬ͘͟ΓΘ͔ΔDDD (ઓज़తͷΈ) ϛπό  

Slide 2

Slide 2 text

ࣗݾ঺հ • ϛπόʢM2ʣ • @EX46900521 • य़͔Β౦ژ • Haskell, Go  

Slide 3

Slide 3 text

ࠓ೔࿩͢͜ͱ • υϝΠϯۦಈઃܭͷงғؾ • Α͘࢖ΘΕΔΞʔΩςΫνϟʢઓज़తDDDʣ • υϝΠϯۦಈઃܭͰɼؾΛ͚ͭΔ͜ͱ  

Slide 4

Slide 4 text

ࠓ೔࿩͞ͳ͍͜ͱ • υϝΠϯۦಈઃܭΛ׬શʹཧղ͢Δ • ओʹϞσϦϯάͷ࿩͸͠ͳ͍ʢઃܭͰ͸͕͜͜ॏཁʣ • ϞσϦϯάʹؔͯ͠͸͜ͷεϥΠυ͕Θ͔Γ΍͘͢ ͯΑ͞Έʹ͋;Ε͍ͯ·͢ɽ • https://speakerdeck.com/smdmts/ddd-for- engineer-newbie  

Slide 5

Slide 5 text

υϝΠϯۦಈઃܭͷඞཁੑ • มߋʹڧ͍ίʔυΛॻ͖͍ͨ • ϩδοΫΛͲ͜ʹஔ͔͘໰୊ʹରͯ͠ਅ݋ʹ ઓ͍ͬͯ͘  

Slide 6

Slide 6 text

υϝΠϯ = ۀ຿ͷؔ৺ࣄ  

Slide 7

Slide 7 text

υϝΠϯۦಈઃܭ = 
 ۀ຿ͷؔ৺ࣄʹண໨ͨ͠ ઃܭख๏  

Slide 8

Slide 8 text

ۀ຿ͷؔ৺ࣄ • ྫɿ • ਓ͕͓ۚΛࣗ෼ͷޱ࠲ʹৼΓࠐΉ  

Slide 9

Slide 9 text

ਓ͕ۚΛ෷͏  

Slide 10

Slide 10 text

ਓ͕ۚΛࣗ෼ͷޱ࠲ʹৼΓࠐΉ 8IP 8IBU 8IBU 8IFSF  

Slide 11

Slide 11 text

γεςϜ֎෦ͷಈ͖ ৼΓࠐΉ ৼࠐऴྃ ௨஌  

Slide 12

Slide 12 text

γεςϜ಺෦ͷಈ͖  

Slide 13

Slide 13 text

γεςϜ಺෦ͷಈ͖ γεςϜ σʔλϕʔε ৼࠐॲཧɼϢʔβ৘ใ֬ೝɼ ࢒ߴ֬ೝɽɽɽFUD  

Slide 14

Slide 14 text

 

Slide 15

Slide 15 text

Q: ͜Ε͸ྑ͍ίʔυͰ͔͢ʁ  

Slide 16

Slide 16 text

A: ͋·Γྑ͘ͳ͍ίʔυͰ͢  

Slide 17

Slide 17 text

Կ͕ྑ͘ͳ͍ͷʁ  

Slide 18

Slide 18 text

Α͘ͳ͍఺ • Ұͭͷϝιου͕ͨ͘͞Μͷ͜ͱΛ͗͢͠ • ςετ͕ॻ͖ͮΒ͍ • ͺͬͱݟͲ͕͜Ͳ͏ಈ͍͍ͯΔͷ͔Θ͔Γ ͮΒ͍  

Slide 19

Slide 19 text

ͨ͘͞Μ͋ΔॲཧΛ෼͚Δ  

Slide 20

Slide 20 text

ओͳϩδοΫ • ೝূ֬ೝ • ֹ͕ۚෆਖ਼Ͱͳ͍͔֬ೝʢ਺஋Ҏ֎Ͱ͸ͳ͍ ͔ʣ • ৼࠐॲཧ • ࢒ߴ֬ೝ  

Slide 21

Slide 21 text

 

Slide 22

Slide 22 text

෼ׂɿྑ͍ ݟ௨͠ɿѱ͍  

Slide 23

Slide 23 text

ݟ௨͠ΛΑ͘͢ΔͨΊͷ
 ϨΠϠʔͷߟ͑ํ         σʔλͷྲྀΕ͸ Ұํ޲  

Slide 24

Slide 24 text

֤ϨΠϠʔͷ໾ׂ                                 Ϣʔβೖྗ σʔλͷ ܭࢉɼՃ޻ σʔλͷӬଓԽ ͭͳ͗  

Slide 25

Slide 25 text

ϨΠϠʔΛ෼͚ΔϝϦοτ • ίʔυͷஔ͖৔ॴΛ໌֬ʹܾΊΒΕΔ • ϩδοΫΛҰՕॴʹूதͯ͠ɼ؅ཧͰ͖Δ • ֤ϨΠϠʔͷؔ܎Λૄ݁߹ʹอͯΔ  

Slide 26

Slide 26 text

ઌ΄ͲͷίʔυΛϨΠϠʔ෼͚  

Slide 27

Slide 27 text

ϑΝΠϧߏ੒  

Slide 28

Slide 28 text

domain/MoneyΫϥε • ֹ͕ۚෆਖ਼Ͱ͸ͳ͍͔ͷ൑ఆΛMoneyΫϥε ʹҠ͢  

Slide 29

Slide 29 text

domain/AuthenticationService • AuthΛߦ͏ॲཧΛAuthenticationServiceʹҠ ͨ͠  

Slide 30

Slide 30 text

infra/MoneyRepository  

Slide 31

Slide 31 text

application/TransferService  

Slide 32

Slide 32 text

มߋޙ (TransferHandler)  

Slide 33

Slide 33 text

ͪΐ͍εοΩϦͨ͠  

Slide 34

Slide 34 text

͓͞Β͍                                 Ϣʔβೖྗ σʔλͷ ܭࢉɼՃ޻ σʔλͷӬଓԽ ͭͳ͗  

Slide 35

Slide 35 text

΋͏গ͠ϨΠϠʔ ෼͚ʹ͍ͭͯ  

Slide 36

Slide 36 text

ૄ݁߹  

Slide 37

Slide 37 text

ར༻ଆ͕ΠϯλʔϑΣʔεͷΈ Λ༻͍ɼ࣮૷ͱ෼཭͢Δ  

Slide 38

Slide 38 text

Javaͷinterface  

Slide 39

Slide 39 text

Cat΍Dogͷத਎Λ஌Δඞཁ ͸ͳ͘ɼશͯAnimalͰOK  

Slide 40

Slide 40 text

 

Slide 41

Slide 41 text

RepositoryपΓͷ࣮ફతͳ࿩  

Slide 42

Slide 42 text

֤σʔλιʔεͷ੾Γସ͑Λ ༰қʹͰ͖Δ  

Slide 43

Slide 43 text

લ൒ͷ·ͱΊ • ϨΠϠʔߏ଄ʹͯ͠ɼॲཧΛ෼ׂ͠Α͏ • ΠϯλʔϑΣʔεͷΈΛఏڙ͠ɼϨΠϠʔؒ Λૄ݁߹ʹ  

Slide 44

Slide 44 text

গ͠࿩Λ໭ͯ͠  

Slide 45

Slide 45 text

ਓ͕ۚΛࣗ෼ͷޱ࠲ʹৼΓࠐΉ 8IP 8IBU 8IBU 8IFSF  

Slide 46

Slide 46 text

Ϟϊ • User • E-mail • UserName • ۚ • ੫ֹ  

Slide 47

Slide 47 text

EntityͱValue Object • Entity • idΛ࣋ͪɼΦϒδΣΫτ͝ͱʹ۠ผ͞Ε͏Δ Ϟϊ • Value Object • ஋ͷΈΛ࣋ͪɼෆมͳΦϒδΣΫτ  

Slide 48

Slide 48 text

Ϟϊ • User (Entity) • E-mail (Value Object) • UserName (Value Object) • ۚ (Value Object) • ੫ֹ  

Slide 49

Slide 49 text

૊ΈཱͯΔ (User)  

Slide 50

Slide 50 text

ϑΝΠϧߏ੒ʢUserʣ  

Slide 51

Slide 51 text

ϙΠϯτ • શͯͷม਺ΛԿ͔͠ΒͷΫϥεͰϥοϓ͢Δ • Integerܕ΍StringܕͩͱԿΛҙຯ͍ͯ͠Δ ͔Θ͔ΓͮΒ͍  

Slide 52

Slide 52 text

ू໿ʢAggregateʣ  

Slide 53

Slide 53 text

ू໿ • Root EntityΛ࣋ͪɼͦͷԼʹෳ਺ͷEntity, Value ObjectΛ࣋ͭͰ͔͍υϝΠϯΦϒδΣ Ϋτ • ࠓճ͸User͕ू໿  

Slide 54

Slide 54 text

ू໿ͷϧʔϧ • ू໿ҎԼͷ஋Λࢀর͢Δͱ͖͸ඞͣRoot Entityʹ໰͍߹ΘͤΔ • Root Entity͕஋ͷීวੑΛอূ͢Δ  

Slide 55

Slide 55 text

ͨ͘͞Μͷ஋ΛҰͭͷ
 ΦϒδΣΫτʹԡ͠ࠐΊͯ
 ؔ৺͝ͱΛ಺෦ʹ  

Slide 56

Slide 56 text

ΦϒδΣΫτࢦ޲ΤΫααΠζ  

Slide 57

Slide 57 text

https://gist.github.com/ sambatriste/ 5535b1f0f6a73e9b37239d 86edf61c70  

Slide 58

Slide 58 text

ϧʔϧ • 1ͭͷϝιουʹ͖ͭΠϯσϯτ͸̍ஈམ • else۟͸ېࢭ • ϓϦϛςΟϒܕͱจࣈྻܕ͸ϥοϓ͢Δ • Ұߦʹ͖ͭυοτ͸Ұͭ • ໊લ͸লུ͠ͳ͍ • શͯͷΤϯςΟςΟΛখ͘͞ • 1ͭͷΫϥεʹ͖ͭɼΠϯελϯεม਺͸ೋͭ·Ͱ • ϑΝʔετΫϥείϨΫγϣϯΛ࢖༻͢Δ • Getter, Setter, ϓϩύςΟΛ࢖༻͠ͳ͍͜ͱ  

Slide 59

Slide 59 text

શͯͷΤϯςΟςΟΛখ͘͞ • 1ϑΝΠϧ50ߦ • 1ύοέʔδ10ϑΝΠϧ  

Slide 60

Slide 60 text

ϑΝʔετΫϥείϨΫγϣϯ Λ࢖༻͢Δ • ίϨΫγϣϯΛΫϥεͰϥοϓ͢Δ • ίϨΫγϣϯʹର͢ΔॲཧΛϝιουͰఆٛ Ͱ͖Δར఺͕͋Δ  

Slide 61

Slide 61 text

Getter, SetterΛར༻͠ͳ͍ • ϩδοΫΛݺͿͷͰ͋ͬͯɼ௚઀஋Λ໰͍߹ ΘͤΔཧ༝Λ࡞Βͳ͍Α͏ʹ͢Δ • ϩδοΫΛҙࣝతʹϞσϧʹ࣮૷͢ΔΑ͏ʹ ͳΔ  

Slide 62

Slide 62 text

ΦϒδΣΫτࢦ޲ ΤΫααΠζ  

Slide 63

Slide 63 text

ޙ൒ͷ·ͱΊ • ϞϊΛҙࣝͯ͠ɼϞσϧΛ࡞੒͍ͯ͘͠ • ΦϒδΣΫτࢦ޲ΤΫααΠζͷ࣮ફʹΑΔ ΑΓ෼ׂ͞Εͨίʔυ΁  

Slide 64

Slide 64 text

DDDͰؾΛ͚ͭΔ͜ͱ • υϝΠϯ૚ͷϩδοΫ͕ଞͷ૚ʹ࿙ΕΔՄೳ ੑ͕͋ΔͷͰ஫ҙ • υϝΠϯϞσϧ͸ҰேҰ༦ͷ΋Ͱ͸ͳ͘ɼΏͬ ͘Γۛຯ͠ͳ͕Β։ൃΛ͢Δ͜ͱ͕େࣄ  

Slide 65

Slide 65 text

·ͱΊ • ϨΠϠʔΛҙࣝ͠ɼॲཧΛ෼ׂ • ϩδοΫΛҙࣝͯ͠ɼҰՕॴʹूதͤ͞Δ • ΦϒδΣΫτࢦ޲ΤΫααΠζΛҙࣝ͢Δ  

Slide 66

Slide 66 text

͓·͚  

Slide 67

Slide 67 text

ϑϩϯτͷΞʔΩςΫνϟ • MVP • MVVM • Flux  

Slide 68

Slide 68 text

MVP  

Slide 69

Slide 69 text

MVVM  

Slide 70

Slide 70 text

Flux https://www.google.co.jp/url?sa=i...  

Slide 71

Slide 71 text

ϨΠϠʔʹ෼͚ͯؔ৺͝ͱͷ ෼཭Λߦͳ͍ͬͯΔ  

Slide 72

Slide 72 text

Atomic Design • UI ComponentsΛ5ͭͷϨϕϧʹ෼͚Δ • Atoms • Molecules • Organisms • templates • Pages  

Slide 73

Slide 73 text

Atomic Design https://cdn-images-1.medium.com/max/...  

Slide 74

Slide 74 text

ࡉ͔͘UIΛ෼͚ͯɼσβΠφʔ ͷਓͱڞಉͰ࡞ۀ͠΍͘͢͢Δ  

Slide 75

Slide 75 text

ؾ͕޲͍ͨΒ૚ʹ෼͚ͯ ։ൃͯ͠Έ͍ͯͩ͘͞