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
41
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
48
AIハッカソン 発表資料
jh_178bz
0
1.1k
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
55
8.3k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Skip the Path - Find Your Career Trail
mkilby
1
210
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Building the Perfect Custom Keyboard
takai
2
860
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
520
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
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Ҏ߱ ͡Όͳ͍ͱ͠ΜͲ͍) • ϞσϦϯά͕ͷָ͍͍͢͝͠
• ۀϑϩʔ͕ϢʔεέʔεͰදݱͰ͖ΔˠυΩϡϝϯτʹͳΔ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠