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
40
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Laravel×DDDやってみた
共同主催した総勢50名以上の下記イベントでのLT登壇資料
https://web-creator-meetup-in-kansai.connpass.com/event/250410/
Jo Hattori
May 30, 2023
More Decks by Jo Hattori
See All by Jo Hattori
ADRを書こう
jh_178bz
1
47
AIハッカソン 発表資料
jh_178bz
0
1k
Featured
See All Featured
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
450
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
310
Code Reviewing Like a Champion
maltzj
528
40k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
For a Future-Friendly Web
brad_frost
183
10k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
210
How to build a perfect <img>
jonoalderson
1
5.7k
The SEO identity crisis: Don't let AI make you average
varn
0
500
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
Bash Introduction
62gerente
615
220k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
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Ҏ߱ ͡Όͳ͍ͱ͠ΜͲ͍) • ϞσϦϯά͕ͷָ͍͍͢͝͠
• ۀϑϩʔ͕ϢʔεέʔεͰදݱͰ͖ΔˠυΩϡϝϯτʹͳΔ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠