Slide 1

Slide 1 text

Laravel ✖︎ DDD΍ͬͯΈͨ Jo Hattori 2022-06-25

Slide 2

Slide 2 text

ࣗݾ঺հ (Twitter: @sr_jooo) • େࡕੜ·Εɺେࡕҭͪ • ߴߍଔۀޙɺߤۭػܥ੡଄ϝʔΧʔʹͯண཮૷ஔͷ։ൃɾࢼݧ • 21ࡀͰITۀքˠSIerͰమಓγεςϜͷ։ൃ΁ˠେࡕͰCTI։ൃ • PHP,Python,TypeScript,Laravel,Vue2,3,C,C#,Java.. • DDDྺ൒೥ɺΤϰΝϯεຊະಡɺDDDͰ0͔ΒઃܭʙϦϦʔεܦݧ༗Γɻ ΦχΦϯΞʔΩςΫνϟɺϔΩαΰφϧΞʔΩςΫνϟͰͷ։ൃܦݧ • झຯ 
 όΠΫ,Ϩʔε,ొࢁ,Ξ΢τυΞ,Ξχϝ..etc

Slide 3

Slide 3 text

DDD(Domain Driven Design) υϝΠϯۦಈઃܭ • DDD(υϝΠϯۦಈઃܭ) 
 υϝΠϯΤΩεύʔτؚΊɺۀ຿ΛϞσϦϯάͦ͠ΕΒΛEntity,Value Object, Domain Service,UsecaseͳͲΛ׆༻ͨ͠۩ମతͳυϝΠϯ(ۀ຿஌ࣝ)ͷ 
 දݱɾ։ൃख๏ • ΫϦʔϯΞʔΩςΫνϟ 
 SOLIDݪଇ(୯Ұ੹೚ɾΦʔϓϯΫϩʔζυɾϦείϑͷஔ׵ɾΠϯλʔϑΣʔε෼཭ɾґଘ ੑٯస)Λຬͨͨ͠ઃܭࢥ૝ • ΫϦʔϯΞʔΩςΫνϟ !== DDD(υϝΠϯۦಈઃܭ) 
 DDDͰ։ൃΛ͢Δ্ͰΫϦʔϯΞʔΩςΫνϟͷख๏ΛऔΓೖΕΔΈ͍ͨͳ

Slide 4

Slide 4 text

Ͳ͏΍ͬͯΩϟονΞοϓͯ͠Δʁ(ೖ໳) • ʮݱ৔Ͱ໾ཱͭγεςϜઃܭͷݪଇʯ(૿ా ږ͞Μ) • ʮυϝΠϯۦಈઃܭೖ໳ʯ(੒੉Ҹએ͞Μ) • ϩάϥεͷদԬ͞ΜͷTwitter(@little_hand_s) Q&A(GitHub) • ૿ా͞ΜͷϦϙδτϦ(https://github.com/system-sekkei/isolating- the-domain) • Paizaͱ͔ͰϞσϦϯάͯ͠ղ͍ͨΓɺVO,Entity࡞ͬͯղ౴

Slide 5

Slide 5 text

σΟϨΫτϦߏ੒ • DomainҎԼ͸ίϯςΩετ(֓೦ ͱ͔ू໿తͳ)୯ҐͰ۠੾Δ • Repository ʹ͸InterfaceΛ͓͘ • ClientͰ͸֎෦αʔϏε΁ͷ RepositoryInterfaceΛ͓͘

Slide 6

Slide 6 text

Presentation • γϯάϧΞΫγϣϯController • ಠࣗϨεϙϯμʔΛ࢖༻ͯ͠ฦ͢ • ActionʹϩδοΫ͸ॻ͔ͳ͍ • UsecaseݺͿ͚ͩͰOK

Slide 7

Slide 7 text

Domain Object(Value Object, Entity) • Entity͸ίϯετϥΫλΛprivateʹͯ͠ɺඞͣϑΝΫτϦϝιουΛ௨ͯ͠ ੜ੒͢Δ 
 →VOಉ࢜Λ࢖ͬͨϩδοΫͳͲ͕ੜ·ΕΔҝɺ୯७ʹnewͤ͞ͳ͍ • ϦϙδτϦ͔Βੜ੒͢ΔϑΝΫτϦ΋෼͚Δ 
 ॳظੜ੒࣌ͱϦϙδτϦ͔ΒฦΔ࣌Ͱ͸ɺϩδοΫ͕ҧ͏͜ͱ͕ଟ͍(ࣝผ ࢠ༗ແͳͲ) • Setter͸༻ҙ͠ͳ͍(ྫ֎͋Γ)

Slide 8

Slide 8 text

Entity͸ίϯετϥΫλΛprivateʹͯ͠ɺඞͣϑΝΫτϦϝιουΛ௨ͯ͠ ੜ੒͢Δ

Slide 9

Slide 9 text

ϦϙδτϦ͔Βੜ੒͢ΔϑΝΫτϦ΋෼͚Δ

Slide 10

Slide 10 text

Setter͸༻ҙ͠ͳ͍(ྫ֎͋Γ)

Slide 11

Slide 11 text

Domain Service • υϝΠϯΦϒδΣΫτࣗମ͕࣋ͭϩδοΫͱͯ͠͸ҧ࿨ײ͕͋ΔɺυϝΠϯϧʔϧΛදݱ ͢Δ • Laravelจ຺ͰͷαʔϏεΫϥεͱ͸શ͘ҧ͏ ྫ) • ॏෳνΣοΫ • ෳ਺৚݅ʹΑͬͯ࡟আՄೳ͔Ͳ͏͔൑ఆ͢Δ৔߹ͳͲ • CRUDͱಉ࣌ʹߦΘΕΔॲཧ 
 (ϩΪϯάɺ֎෦αʔϏε΁ͷ௨஌)

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

DDDͰ΍ͬͯΈͯײ૝ • ֶशίετ͸ߴ͍ • ॲཧΛॻ͘ϨΠϠʔ͕͸͖ͬΓ͍ͯ͠Δҝɺ৔ॴΛߟ͑ͣ೴ࢮͰॻ͚Δ • ·ͩܕ෇͚ʹ՝୊͕͋ΔPHPͰ͸ɺͪΐͬͱݫ͍͜͠ͱ΋͋Δ(8.0Ҏ߱ ͡Όͳ͍ͱ͠ΜͲ͍) • ϞσϦϯά͕΋ͷָ͍͍͢͝͠ • ۀ຿ϑϩʔ͕ϢʔεέʔεͰදݱͰ͖ΔˠυΩϡϝϯτʹ΋ͳΔ

Slide 14

Slide 14 text

͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠