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
120
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
110
Other Decks in Technology
See All in Technology
なんで私に登壇依頼が?! ~頼られるエンジニアになるためには~ /
mixi_engineers
PRO
2
200
匠MethodとRDRAとICONIXとDDDで実現する一気通貫オブジェクト指向開発
haru860
4
2k
プッシュ型子育てサービスを、先行プロジェクト実施自治体において開始します
govtechtokyo
0
250
Getting started with controlling LEGO using Swift
hcrane
0
130
家族アルバム みてねで直面してきた技術的負債 / MIXI KAG 2024
isaoshimizu
17
7.7k
生成AIサービスPanorama AIご説明資料
sdt
0
300
検証からプロダクトへ: シームレスなLLM開発の ためのしくみ作り
nunukim
1
160
マイクロサービス環境におけるDB戦略 in DMMプラットフォーム
pospome
11
3k
2023 Japan AWS Jr.Championsに選出されての振り返りとこれから
hiropy877
1
130
Challenges - Open Farming Hackdays 2024
loleg
0
540
技術広報経験0のEMがエンジニアブランディングをはじめてみた
coconala_engineer
1
130
ビジネスとコード品質の接合点 そしてコード品質がそこに及ぼす影響 / The Intersections of Business and Engineering, and The Impact of Code Quality There
mtx2s
10
1k
Featured
See All Featured
Practical Orchestrator
shlominoach
180
9.7k
Git: the NoSQL Database
bkeepers
PRO
421
63k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
113
18k
How GitHub Uses GitHub to Build GitHub
holman
467
290k
How to Ace a Technical Interview
jacobian
272
22k
The MySQL Ecosystem @ GitHub 2015
samlambert
242
12k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
272
12k
Building an army of robots
kneath
300
41k
Large-scale JavaScript Application Architecture
addyosmani
501
110k
Producing Creativity
orderedlist
PRO
335
39k
Navigating Team Friction
lara
177
13k
What’s in a name? Adding method to the madness
productmarketing
PRO
14
2.6k
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ઃܭݪଇΛͯΊͯΈΑ͏ • मਖ਼͢ΔࡍʹσβΠϯύλʔϯΛ͍ͬͯΕબࢶ͕૿͑ΔΑ • ॊೈʹରԠ͢Δ͜ͱ͕େࣄ •
ϖΞϓϩͱ͔ྑ͍Έ͍ͨͰ͢Α • ଞʹݴ͍͍ͨ͜ͱ͋Δ͚ͲແཧͰͨ͠ɺɺɺ