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

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