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
SOLID原則について / about the SOLID principles
Search
Jun Ageishi
September 26, 2018
Technology
0
170
SOLID原則について / about the SOLID principles
社内勉強会でSOLID原則、SRP・OCPについて発表しました。
Jun Ageishi
September 26, 2018
Tweet
Share
More Decks by Jun Ageishi
See All by Jun Ageishi
Bridgeパターン / Bridge Design Pattern
jageishi
0
140
Other Decks in Technology
See All in Technology
Context Engineeringの取り組み
nutslove
0
300
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
220
20260204_Midosuji_Tech
takuyay0ne
1
140
AIと新時代を切り拓く。これからのSREとメルカリIBISの挑戦
0gm
0
830
Webhook best practices for rock solid and resilient deployments
glaforge
1
270
クレジットカード決済基盤を支えるSRE - 厳格な監査とSRE運用の両立 (SRE Kaigi 2026)
capytan
6
2.6k
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
620
Digitization部 紹介資料
sansan33
PRO
1
6.8k
入社1ヶ月でデータパイプライン講座を作った話
waiwai2111
1
260
変化するコーディングエージェントとの現実的な付き合い方 〜Cursor安定択説と、ツールに依存しない「資産」〜
empitsu
4
1.3k
Tebiki Engineering Team Deck
tebiki
0
24k
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
230
Featured
See All Featured
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
140
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
450
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
0
310
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
240
Evolving SEO for Evolving Search Engines
ryanjones
0
120
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
51
How STYLIGHT went responsive
nonsquared
100
6k
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Transcript
SOLIDݪଇʹ͍ͭͯ @jageishi
ѱ͍ઃܭͬͯʁ
• มߋ͠ʹ͍͘ • ෆඞཁʹෳࡶ • ෆඞཁͳ܁Γฦ͠ • ෆಁ໌ • Ҡ২ੑ͕ͳ͍
ةͳ͍ɺɺ
• मਖ਼ʹ͕͔͔࣌ؒΔ • Өڹൣғ͕Θ͔Βͳ͍ • मਖ਼͢Δͷ͕ා͍ • ۀ͕૿͑Δ etc..
SOLIDݪଇʹ ͍ͯ͠Δ͜ͱ͕ଟ͍
SOLIDݪଇ • ΦϒδΣΫτࢦݴޠʹ͓͍ͯɺ࠷ྑͷઃܭΛ͢Δॿ͚ͱ ͳΔݪଇ
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle) 3.Ϧείϑͷஔݪଇ (LSP : Liskov Substitution Principle) 4.ΠϯλϑΣʔεͷݪଇ (ISP : Interface Segregation Principle) 5.ґଘؔٯసͷݪଇ (DIP : Dependency Inversion Principle)
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle) ࠓ͜ͷ2ͭʹ͍ͭͯઆ໌͠·͢ɻ
ਤܗඳըΞϓϦέʔγϣϯ Λྫʹߟ͑ͯΈΔ
ཁ݅ • ํܗͱԁΛը໘ʹඳը͍ͨ͠
None
DrawingToolRectangleͱ CircleΛ͏
None
None
SOLIDݪଇΛ ͯΊͯΈΔ
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
୯Ұͷݪଇ (SRP : Single Responsibility Principle) • Ϋϥεͷ2ͭҎ্ଘࡏͯ͠ͳΒͳ͍
ํܗΛඳը͢Δ ׂ ԁΛඳը͢Δ ׂ
͜ͷΫϥεΛมߋ͢Δέʔε • ํܗΛඳը͢ΔॲཧΛमਖ਼͢Δ߹ • ԁΛඳը͢ΔॲཧΛमਖ਼͢Δ߹ • ଞͷਤܗʹରԠ͢Δ߹ etc..
มߋཧ༝͕ෳ͋Δ = ͕ෳ͋Δ
୯ҰͷݪଇΛ ຬ͍ͨͯ͠ͳ͍
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
• मਖ਼͢Δͨͼʹϝιου͕ෳࡶʹͳΔ • ίϯϑϦΫτ͢ΔՄೳੑ͕ߴ͘ͳΔ • ํܗ༻ͷඳըॲཧΛमਖ਼ͨͭ͠Γ͕ԁͷඳըॲཧʹ Өڹ͕ग़ͯ͠·͏͔ etc..
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed Principle) • ֦ுʹରͯ͠։͍͍ͯͯɺमਖ਼ʹରͯ͠ด͍ͯ͡ͳ͚Ε ͳΒͳ͍
None
ཁ͢Δͱɺɺɺ • ֦ுͰ͖ͯमਖ਼؆୯
͜͜Ͱ
Ճཁ݅ • ࡾ֯ܗΛѻ͑ΔΑ͏ʹ͍ͨ͠
ͲͷΑ͏ʹमਖ਼͢Δʁ
• TriangleΫϥεΛՃ͢Δ • DrawingToolΫϥεͷdrawAllShapes()Λमਖ਼͢Δ
ࡾ֯ܗΫϥεΛՃ
ࡾ֯ܗΛඳը͢Δ ॲཧΛՃ
؆୯ʂ
Ͱɺɺɺ • ӨڹՕॴ͚ͩ͜͜ʁ • ଞͷਤܗΛՃͨ͠ΒͲΜͲΜෳࡶʹͳΔ͚Ͳେৎʁ • मਖ਼ଞͷॲཧʹӨڹ͍ͯ͠ͳ͍͜ͱΛอূͰ͖Δʁ
େมɺɺɺ
• ࡾ֯ܗΛՃ͢ΔͷՄೳ (TriangleΫϥεͷՃ) = ֦ுʹରͯ͠։͍͍ͯΔʢ͍͓ͪ͏ʣ • ͔͠͠ɺमਖ਼ՕॴʢӨڹՕॴʣଟ͍͠ɺௐࠪඞཁ = मਖ਼ʹରͯ͠ด͍ͯ͡ͳ͍ʂ
ΦʔϓϯɾΫϩʔζυͷݪଇΛ ຬ͍ͨͯ͠ͳ͍
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
• ػೳ֦ுΛߦ͏ࡍͷӨڹൣғ͕ଌΕͳ͍ • मਖ਼͢ΔͨͼʹӨڹՕॴΛௐࠪ͢ΔͷർΕΔ • ରԠ͕࿙ΕΔՄೳੑ্͕͕Δ • ճؼςετ͕͍
ݪଇΛຬͨ͢Α͏ʹ मਖ਼͠Α͏ʂ
伴ʮநʯ
• એݴ͕ݻఆ͞Ε͍ͯͯɺಛఆͷ࣮ʹ݁߹͍ͯ͠ͳ͍ϝιο υΛʮநʯͰදݱͰ͖Δɻ ͭ·Γɺϝιουݺͼग़͠ํ๏ಉ͚ͩ͡Ͳɺ࣮ࡍͷॲ ཧΠϯελϯεʢੜΫϥεʣʹͤΔ͜ͱ͕ग़དྷΔɻ
मਖ਼ͯ͠ΈΔ
None
(ந)ਤܗΫϥεΛ࡞ ํܗԁ ਤܗΫϥεΛ࣮ drawAllShapes()Ͱ ํܗԁΛʮਤܗʯ ͱͯ͠ѻ͏͜ͱ͕ग़དྷΔ
None
֤ਤܗઐ༻ͷdraw()Λ࣮
None
நਤܗΫϥεͷdraw()Λݺͼग़͚ͩ͢
ྑͦ͞͏
ݪଇΛͯΊͯΈΔ
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
୯Ұͷݪଇ (SRP : Single Responsibility Principle) • Ϋϥεͷ2ͭҎ্ଘࡏͯ͠ͳΒͳ͍
None
͋͘·ͰʮਤܗʯΛඳը͢Δ͚ͩ
• ਤܗͷඳըॲཧΛमਖ਼͢Δͱͯ͠ɺShapeΫϥεΛ࣮ ͨ͠ੜΫϥεͷdraw()Λमਖ਼͢Δ͚ͩ
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed Principle) • ֦ுʹରͯ͠։͍͍ͯͯɺमਖ਼ʹରͯ͠ด͍ͯ͡ͳ͚Ε ͳΒͳ͍
Ճཁ݅ • ࡾ֯ܗΛѻ͑ΔΑ͏ʹ͍ͨ͠
ʮਤܗʯΫϥεΛ࣮ͨ͠ ࡾ֯ܗΫϥεΛՃ
None
ࡾ֯ܗ༻ͷdraw()Λ࣮
None
drawAllShapes()ʮਤܗʯ͕ ࣮ࡍʹͲͷΑ͏ͳܗͷਤܗͳͷ ͔Βͳͯ͘ྑ͍ मਖ਼͢Δඞཁͳ͍ʂ
• ਤܗΫϥεΛ࣮ͨ͠ࡾ֯ܗΫϥεΛՃ͠ɺdraw()Λ࣮ ͢Δ • طଘॲཧͷमਖ਼ෆཁ
• ਤܗΫϥεΛ࣮ͨ͠ࡾ֯ܗΫϥεΛՃ͠ɺdraw()Λ࣮ ͢Δ = ֦ுʹରͯ͠։͍͍ͯΔ • طଘॲཧͷमਖ਼ෆཁ = मਖ਼ʹରͯ͠ด͍ͯ͡Δ
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
·ͱΊ • SOLIDݪଇڧݻͰॊೈͳઃܭΛߦ͏ͨΊͷ5ͭͷݪଇ • ઃܭͨ͠ΒSOLIDઃܭݪଇΛͯΊͯΈΑ͏ • मਖ਼͢ΔࡍʹσβΠϯύλʔϯΛ͍ͬͯΕબࢶ͕૿͑ΔΑ • ॊೈʹରԠ͢Δ͜ͱ͕େࣄ •
ϖΞϓϩͱ͔ྑ͍Έ͍ͨͰ͢Α • ଞʹݴ͍͍ͨ͜ͱ͋Δ͚ͲແཧͰͨ͠ɺɺɺ