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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Jo Hattori
May 30, 2023
1
37
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
42
AIハッカソン 発表資料
jh_178bz
0
990
Featured
See All Featured
Embracing the Ebb and Flow
colly
88
5k
30 Presentation Tips
portentint
PRO
1
240
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
220
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.1k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
110k
A Tale of Four Properties
chriscoyier
162
24k
SEO for Brand Visibility & Recognition
aleyda
0
4.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
The agentic SEO stack - context over prompts
schlessera
0
670
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
140
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Ҏ߱ ͡Όͳ͍ͱ͠ΜͲ͍) • ϞσϦϯά͕ͷָ͍͍͢͝͠
• ۀϑϩʔ͕ϢʔεέʔεͰදݱͰ͖ΔˠυΩϡϝϯτʹͳΔ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠