Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
CleanArchitecture輪読会 - SOLID原則 - / Clean Archit...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
juve534
August 13, 2021
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CleanArchitecture輪読会 - SOLID原則 - / Clean Architecture Round Reading SOLID
社内勉強会で行ったCleanArchitecture輪読会の一部
juve534
August 13, 2021
More Decks by juve534
See All by juve534
DMMプラットフォームでプルリクエストのマージ時間を250時間から50時間に減らした話 / Developers Summit 2023
juve534
3
3k
スクラムガイド輪読会 / changes 2020 Scrum Guide
juve534
0
140
DIについて知る / Let's study together DI.
juve534
0
85
PHPUnitでパラメタライズドテストと例外のテスト / PHPUnit +Parameterized Test
juve534
0
340
レガシーコードに最低限の秩序をもたせる
juve534
2
1.6k
Featured
See All Featured
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
630
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
520
Believing is Seeing
oripsolob
1
240
The Curious Case for Waylosing
cassininazir
1
570
Product Roadmaps are Hard
iamctodd
55
13k
Facilitating Awesome Meetings
lara
57
7.2k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
The SEO Collaboration Effect
kristinabergwall1
1
590
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
400
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
My Coaching Mixtape
mlcsv
0
360
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Transcript
CleanArchitectureྠಡձ - SOLIDݪଇ - @juve534
ࣗݾհ • Twitter / GitHub • juve534 • ࣄ •
PHPΛͬͨΞϓϦέʔγϣϯ։ൃ • ͖ͳαοΧʔνʔϜ • Ϣϕϯτε(Juventus)
ࠓ͢͜ͱ • ઃܭͷݪଇ • SRP : ୯Ұͷݪଇ • OCP :
ΦʔϓϯɾΫϩʔζυͷݪଇ • LSP : Ϧείϑͷஔݪଇ • ISP : ΠϯλϑΣʔεͷݪଇ • DIP : ґଘੑٯసͷ๏ଇ
ઃܭͷݪଇ
ઃܭͷݪଇ • ؔσʔλߏʹ͍ͭͯ͢ • ͜ΕΒݐஙͰྫ͑ΔͱϨϯΨ • ϨϯΨͷग़དྷ͕ѱ͚Εྑ͍ݐஙʹͳΒͳ ͍ • ϨϯΨͷग़དྷΛྑ͍ͨ͘͠
SOLIDݪଇͱ • ྺ࢙ݹ͘80ޙ͔Βٞ͞Ε͍ͯΔ • ֤ݪଇͷฒͼॱΛมߋͯ͠ʮSOLIDʯͱͳͬ ͨ • 2004͘Β͍
SOLIDݪଇͱ • ؔσʔλߏΛΫϥεʹΈࠐΉํ๏Λ ڭ͑Δ • ΫϥεOOPͷΫϥεͰͳ͍ • ͍ͭ͘ͷػೳσʔλΛ·ͱΊͨͷ
SOLIDݪଇͱ • ҎԼͷΑ͏ͳதؒϨϕϧͷιϑτΣΞߏΛ༻ҙ • มߋʹڧ͍ • ཧղ͍͢͠ • ίϯϙʔωϯτͷن •
ଟ͘ͷιϑτΣΞγεςϜͰར༻Ͱ͖Δ
SOLIDݪଇͱ • ຊॻͰΨοπϦͦΕͧΕͷݪଇΛղઆ͠ͳ ͍ • هࡌϘϦϡʔϜগͳΊ • ͦΕͧΕͷݪଇΛΓ͍ͨ߹ग़య
ϨϯΨͷͰ͖≠ՈͷͰ͖
SOLIDݪଇΛຬ͍ͨͯ͠Δ≠ ྑ͍ιϑτΣΞ
SOLIDݪଇͱ • Լهͷཁૉॏཁʹͳͬͯ͘Δ • ίϯϙʔωϯτઃܭ • ্ҐͷΞʔΩςΫνϟݪଇ • ଞͷষͰΑΓ্Ґͷઃܭʹ͍ͭͯ৮ΕΔ
SRP : ୯Ұͷݪଇ
SRP : ୯Ұͷݪଇ • ࠷ޡղ͞Ε͍͢ݪଇ • ҰͭͷΛຬͨͤͱ͍͏͜ͱͰͳ͍ • มߋཧ༝͕ͻͱͭͰ͋Δ͖
Ϟδϡʔϧͨͬͨ 1ͭͷΞΫλʔʹରͯ͠ Λෛ͏͖
ঢ়1 : ఆ֎ͷॏෳ
ঢ়1 : ఆ֎ͷॏෳ • 3ͭͷϝιου͕ผʑͷΞΫλʔʹΛͭ • calculatePayܦཧ෦༻(CFO) • reportHoursਓࣄ෦(COO) •
saveσʔλϕʔεཧऀ(CTO)
ঢ়1 : ఆ֎ͷॏෳ • calculatePayͱreportHoursͷίʔυΛڞ௨Խ • ෳͷΞΫλʔͷमਖ਼ΛฒΈἧ͑Δ • ςετ͕ཏ͖͠Ε͵
ঢ়2 : Ϛʔδ • EmployeeͷΑ͏ʹෳͷνʔϜʹ·͙ͨ • ฒߦ։ൃίʔυΛϚʔδ • ίϯϑϦΫτ͕ਏ͍
ҟͳΔΞΫλʔͷίʔυ ׂ͠Α͏
ղܾࡦ • ؔΛผͷΫϥεʹҠಈ͢Δ • Ұྫͱͯ͠FacadeύλʔϯΛ׆༻͢Δ • ≠ LaravelͷFacade
ղܾࡦ
SRP·ͱΊ • ΞΫλʔ͝ͱʹΛׂ͢Δ • ಉ͡Α͏ͳݪଇ্ҐϨΠϠʔͰ͋Δ • ดੑڞ௨ͷݪଇʢCCPʣ • มߋͷ࣠ •
ॏཁͳߟ͑ํͷ1ͭͱ৺ಘΔ
OCP : ΦʔϓϯɾΫϩʔζυͷݪଇ
OCP : ΦʔϓϯɾΫϩʔζυͷݪଇ • 1988ʹఏএ͞Εͨ • ιϑτΣΞͷৼΔ͍ɺ • طଘʹӨڹΛ༩֦͑ͣு͞ΕΔ͖
None
OCP : ΦʔϓϯɾΫϩʔζυͷݪଇ • ྫ͑ձܭใࠂγεςϜ͕͋Δ • Webϖʔδͱͯ͠ग़ྗ • ҹσʔλͱͯ͠ग़ྗ
OCP : ΦʔϓϯɾΫϩʔζυͷݪଇ • ྫ͑ձܭใࠂγεςϜ͕͋Δ • Webϖʔδͱͯ͠ग़ྗ • ҹσʔλͱͯ͠ग़ྗ •
CSVϑΝΠϧͱͯ͠ग़ྗ ͜Ε͕Ճ
OCP : ΦʔϓϯɾΫϩʔζυͷݪଇ • CSVϑΝΠϧΛՃ͢Δ • Webϖʔδ͕Ϋϥογϡͨ͠Βਏ͍ • طଘͷίʔυʹӨڹ͕ग़ͳ͍ઃܭʹ͍ͨ͠
όϦΤʔγϣϯʹΑΔมߋͰ طଘͷίʔυʹӨڹΛ ༩͑ͳ͍Α͏ʹ͢Δ
Ξϓϩʔν • ग़ྗ෦(Presenter)Λࠩ͠ସ͑ΔΑ͏ʹ͢Δ • FactoryϝιουύλʔϯAbstractFactory ύλʔϯΛ͏
OCP·ͱΊ • όϦΤʔγϣϯʹΑΔมߋͰطଘͷίʔυʹ ӨڹΛ༩͑ͳ͍Α͏ʹ͢Δ • ίϯϙʔωϯτΛࡉ͔͘͢Δ͜ͱͰղܾ͢Δ
LSP : Ϧείϑͷஔݪଇ
LSP : Ϧείϑͷஔݪଇ • 1988ʹఏএ • جఈΫϥεͱͦΕΛੜͨ͠ΫϥεɺͲͪ Βࠩ͠ସ͑ՄೳͰ͋Δ͜ͱ
LSP : Ϧείϑͷஔݪଇ • ఆٛ͞Εͨ࣌جఈΫϥεͷൣғ • ݱʹ͓͍ͯΑΓ͍ൣғͰదԠՄೳ • ΠϯλϑΣʔε •
APIͷϦΫΤετ&Ϩεϙϯε
LSP : Ϧείϑͷஔݪଇ • ྫ͑ٸʹAPIͷϨεϙϯεΛม͑Δ • id→user_id • ޓੑͷͳ͍มߋͰݺͼग़͠ൣғશͯͰमਖ਼ ͕ඞཁʹͳΔ
None
None
Ξϓϩʔν • Ұ࣌తʹidͱuser_idͷ྆ํΛฦ͢ • ஔ͖͕͑ऴΘͬͨΒফ͢
None
LSP·ͱΊ • ੜͨ͠ͷجఈͱஔ͖͑ΛՄೳͱ͢Δ • ΠϯλϑΣʔεAPIͷϨεϙϯε
ISP : ΠϯλϑΣʔεͷݪ ଇ
ISP : ΠϯλϑΣʔεͷݪଇ • ΫϥΠΞϯτର͠ɺར༻͠ͳ͍ΠϯλʔϑΣ ΠεͷґଘΛڧ੍͠ͳ͍ • ͜ͷݪଇຊॻͰͷهࡌͱͯগͳ͍ • ׂͱݴޠґଘͳͱ͜Ζ͋Δ͔Β͔ͳ
ISP : ΠϯλϑΣʔεͷݪଇ • ͜Ε্ҐϨϕϧͰద༻Ͱ͖Δ • ྫ͑ϑϧελοΫϑϨʔϜϫʔΫଟ͘ͷ ϥΠϒϥϦʹґଘ͍ͯ͠Δ • ϑϨʔϜϫʔΫར༻ऀؒతʹґଘ͍ͯ͠
Δ͜ͱʹͳΔ
ISP : ΠϯλϑΣʔεͷݪଇ • ؒతʹґଘ͍ͯ͠ΔͷͰϥΠϒϥϦͷΞο ϓσʔτ͕ඞཁ • ์ஔ͍ͯ͠Δͱ੬ऑੑʹͳΔ͔
ISP·ͱΊ • ඞཁͰͳ͍ͷʹґଘ͢ΔͱᐫʹͳΔ • ߋʹ্ҐͷผͷষͰޠΒΕΔ
DIP : ґଘੑٯసͷ๏ଇ
ґଘ͕ؔந͚ͩΛ ࢀর͍ͯ͠Δ
≠۩ʹґଘ͠ͳ͍
DIP : ґଘੑٯసͷ๏ଇ • ݴޠOSϨϕϧͷ۩มԽ͕গͳ͍ • มԽ͍͢͠۩ཁૉʹґଘ͠ͳ͍ • ࣗͨͪͷΞϓϦέʔγϣϯʹ͋Δͣ
DIP : ґଘੑٯసͷ๏ଇ • มԽ͍͢͠۩ΫϥεΛࢀর͠ͳ͍ • ΠϯλʔϑΣΠεΛࢀর͢Δ
DIP : ґଘੑٯసͷ๏ଇ • มԽ͍͢͠۩ΫϥεΛܧঝ͠ͳ͍ • มߋʹΑΔӨڹΛड͚ͯ͠·͏ͨΊ
DIP : ґଘੑٯసͷ๏ଇ • ۩ؔΛΦʔόʔϥΠυ͠ͳ͍ • ґଘؔܧঝͯ͠͠·͏ͨΊ
Ξϓϩʔν • Abstract FactoryͰґଘؔΛநԽ͢Δ
DIP·ͱΊ • มԽ͍͢͠۩ཁૉʹґଘ͠ͳ͍ • நʹґଘ͢ΔΑ͏ʹ͢Δ • ্ҐϨϕϧͰద༻ՄೳͰԿొ͢Δ
͓͞Β͍
Ⅲষ·ͱΊ • ؔσʔλߏͷྑ͍ΈࠐΈํ • ʹSOLIDݪଇ • SOLIDݪଇΛۦͯ͠ϨϯΨͷग़དྷΛྑ͘͢ Δ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ Twitter/GitHub juve534