Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Laravel×DDDやってみた
Search
Jo Hattori
May 30, 2023
1
34
Laravel×DDDやってみた
共同主催した総勢50名以上の下記イベントでのLT登壇資料
https://web-creator-meetup-in-kansai.connpass.com/event/250410/
Jo Hattori
May 30, 2023
Tweet
Share
More Decks by Jo Hattori
See All by Jo Hattori
ADRを書こう
jh_178bz
1
41
AIハッカソン 発表資料
jh_178bz
0
950
Featured
See All Featured
Highjacked: Video Game Concept Design
rkendrick25
PRO
0
250
Done Done
chrislema
186
16k
Speed Design
sergeychernyshev
33
1.4k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.3k
Paper Plane (Part 1)
katiecoart
PRO
0
2.1k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
0
130
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
35
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
89
Test your architecture with Archunit
thirion
1
2.1k
4 Signs Your Business is Dying
shpigford
186
22k
Making Projects Easy
brettharned
120
6.5k
Transcript
Laravel ✖︎ DDDͬͯΈͨ Jo Hattori 2022-06-25
ࣗݾհ (Twitter: @sr_jooo) • େࡕੜ·Εɺେࡕҭͪ • ߴߍଔۀޙɺߤۭػܥϝʔΧʔʹͯணஔͷ։ൃɾࢼݧ • 21ࡀͰITۀքˠSIerͰమಓγεςϜͷ։ൃˠେࡕͰCTI։ൃ •
PHP,Python,TypeScript,Laravel,Vue2,3,C,C#,Java.. • DDDྺɺΤϰΝϯεຊະಡɺDDDͰ0͔ΒઃܭʙϦϦʔεܦݧ༗Γɻ ΦχΦϯΞʔΩςΫνϟɺϔΩαΰφϧΞʔΩςΫνϟͰͷ։ൃܦݧ • झຯ όΠΫ,Ϩʔε,ొࢁ,ΞτυΞ,Ξχϝ..etc
DDD(Domain Driven Design) υϝΠϯۦಈઃܭ • DDD(υϝΠϯۦಈઃܭ) υϝΠϯΤΩεύʔτؚΊɺۀΛϞσϦϯάͦ͠ΕΒΛEntity,Value Object, Domain
Service,UsecaseͳͲΛ׆༻ͨ͠۩ମతͳυϝΠϯ(ۀࣝ)ͷ දݱɾ։ൃख๏ • ΫϦʔϯΞʔΩςΫνϟ SOLIDݪଇ(୯ҰɾΦʔϓϯΫϩʔζυɾϦείϑͷஔɾΠϯλʔϑΣʔεɾґଘ ੑٯస)Λຬͨͨ͠ઃܭࢥ • ΫϦʔϯΞʔΩςΫνϟ !== DDD(υϝΠϯۦಈઃܭ) DDDͰ։ൃΛ͢Δ্ͰΫϦʔϯΞʔΩςΫνϟͷख๏ΛऔΓೖΕΔΈ͍ͨͳ
Ͳ͏ͬͯΩϟονΞοϓͯ͠Δʁ(ೖ) • ʮݱͰཱͭγεςϜઃܭͷݪଇʯ(૿ా ږ͞Μ) • ʮυϝΠϯۦಈઃܭೖʯ(Ҹએ͞Μ) • ϩάϥεͷদԬ͞ΜͷTwitter(@little_hand_s) Q&A(GitHub) •
૿ా͞ΜͷϦϙδτϦ(https://github.com/system-sekkei/isolating- the-domain) • Paizaͱ͔ͰϞσϦϯάͯ͠ղ͍ͨΓɺVO,Entity࡞ͬͯղ
σΟϨΫτϦߏ • DomainҎԼίϯςΩετ(֓೦ ͱ͔ूతͳ)୯ҐͰ۠Δ • Repository ʹInterfaceΛ͓͘ • ClientͰ֎෦αʔϏεͷ RepositoryInterfaceΛ͓͘
Presentation • γϯάϧΞΫγϣϯController • ಠࣗϨεϙϯμʔΛ༻ͯ͠ฦ͢ • ActionʹϩδοΫॻ͔ͳ͍ • UsecaseݺͿ͚ͩͰOK
Domain Object(Value Object, Entity) • EntityίϯετϥΫλΛprivateʹͯ͠ɺඞͣϑΝΫτϦϝιουΛ௨ͯ͠ ੜ͢Δ →VOಉ࢜ΛͬͨϩδοΫͳͲ͕ੜ·ΕΔҝɺ୯७ʹnewͤ͞ͳ͍ •
ϦϙδτϦ͔Βੜ͢ΔϑΝΫτϦ͚Δ ॳظੜ࣌ͱϦϙδτϦ͔ΒฦΔ࣌ͰɺϩδοΫ͕ҧ͏͜ͱ͕ଟ͍(ࣝผ ࢠ༗ແͳͲ) • Setter༻ҙ͠ͳ͍(ྫ֎͋Γ)
EntityίϯετϥΫλΛprivateʹͯ͠ɺඞͣϑΝΫτϦϝιουΛ௨ͯ͠ ੜ͢Δ
ϦϙδτϦ͔Βੜ͢ΔϑΝΫτϦ͚Δ
Setter༻ҙ͠ͳ͍(ྫ֎͋Γ)
Domain Service • υϝΠϯΦϒδΣΫτࣗମ͕࣋ͭϩδοΫͱͯ͠ҧײ͕͋ΔɺυϝΠϯϧʔϧΛදݱ ͢Δ • Laravelจ຺ͰͷαʔϏεΫϥεͱશ͘ҧ͏ ྫ) • ॏෳνΣοΫ
• ෳ݅ʹΑͬͯআՄೳ͔Ͳ͏͔ఆ͢Δ߹ͳͲ • CRUDͱಉ࣌ʹߦΘΕΔॲཧ (ϩΪϯάɺ֎෦αʔϏεͷ௨)
None
DDDͰͬͯΈͯײ • ֶशίετߴ͍ • ॲཧΛॻ͘ϨΠϠʔ͕͖ͬΓ͍ͯ͠ΔҝɺॴΛߟ͑ͣࢮͰॻ͚Δ • ·ͩܕ͚ʹ՝͕͋ΔPHPͰɺͪΐͬͱݫ͍͜͠ͱ͋Δ(8.0Ҏ߱ ͡Όͳ͍ͱ͠ΜͲ͍) • ϞσϦϯά͕ͷָ͍͍͢͝͠
• ۀϑϩʔ͕ϢʔεέʔεͰදݱͰ͖ΔˠυΩϡϝϯτʹͳΔ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠