Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
960
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
21k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
99
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Code Reviewing Like a Champion
maltzj
527
40k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
49
How STYLIGHT went responsive
nonsquared
100
6k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Building an army of robots
kneath
306
46k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Typedesign – Prime Four
hannesfritz
42
2.9k
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Ҏ߱ ͡Όͳ͍ͱ͠ΜͲ͍) • ϞσϦϯά͕ͷָ͍͍͢͝͠
• ۀϑϩʔ͕ϢʔεέʔεͰදݱͰ͖ΔˠυΩϡϝϯτʹͳΔ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠