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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
440
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
430
What happened to RubyGems and what can we learn?
mikemcquaid
0
280
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.6k
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
4
180
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
3
1.4k
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
2
180
15 years with Rails and DDD (AI Edition)
andrzejkrzywda
0
190
Codex 5.3 と Opus 4.6 にコーポレートサイトを作らせてみた / Codex 5.3 vs Opus 4.6
ama_ch
0
130
Amazon S3 Vectorsを使って資格勉強用AIエージェントを構築してみた
usanchuu
3
450
MCPでつなぐElasticsearchとLLM - 深夜の障害対応を楽にしたい / Bridging Elasticsearch and LLMs with MCP
sashimimochi
0
150
レガシー共有バッチ基盤への挑戦 - SREドリブンなリアーキテクチャリングの取り組み
tatsukoni
0
210
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
900
Everyday Curiosity
cassininazir
0
130
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
73
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
sira's awesome portfolio website redesign presentation
elsirapls
0
150
So, you think you're a good person
axbom
PRO
2
1.9k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Chasing Engaging Ingredients in Design
codingconduct
0
110
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
240
Side Projects
sachag
455
43k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
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ઃܭݪଇΛͯΊͯΈΑ͏ • मਖ਼͢ΔࡍʹσβΠϯύλʔϯΛ͍ͬͯΕબࢶ͕૿͑ΔΑ • ॊೈʹରԠ͢Δ͜ͱ͕େࣄ •
ϖΞϓϩͱ͔ྑ͍Έ͍ͨͰ͢Α • ଞʹݴ͍͍ͨ͜ͱ͋Δ͚ͲແཧͰͨ͠ɺɺɺ