Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
「SOLIDの原則って何ですか?」って質問に答えたかった / What's SOLID principle
Satoshi Kawashima
January 30, 2019
Programming
3
1k
「SOLIDの原則って何ですか?」って質問に答えたかった / What's SOLID principle
書籍を読んでもわりと唐突に始まるSOLIDの原則
いざ自分が説明しようとすると結構難儀する代物だと思いますので、それっぽく説明ができるように調べたみたお話です
Satoshi Kawashima
January 30, 2019
Tweet
Share
More Decks by Satoshi Kawashima
See All by Satoshi Kawashima
nazonohito51
1
12k
nazonohito51
7
3.8k
nazonohito51
1
1k
nazonohito51
2
1.1k
nazonohito51
1
3.7k
nazonohito51
1
2.5k
nazonohito51
0
660
nazonohito51
2
1.6k
nazonohito51
2
820
Other Decks in Programming
See All in Programming
grapecity_dev
1
200
panini
1
160
grapecity_dev
0
180
danilop
1
740
takutakahashi
3
270
nkjzm
1
170
manfredsteyer
PRO
0
150
boriswilhelms
0
130
voyage_tech
0
110
christianliebel
PRO
0
140
tetsukick
0
180
legalforce
PRO
0
640
Featured
See All Featured
bkeepers
408
58k
tammielis
237
23k
eitanlees
112
10k
jonyablonski
19
1.2k
chriscoyier
145
20k
philhawksworth
192
8.8k
maggiecrowley
10
500
dougneiner
55
5.4k
lara
15
2.7k
hursman
106
9.3k
shpigford
165
19k
pedronauck
652
110k
Transcript
ౡܛ(.01FQBCP *OD 1)1ษڧձ ʮ40-*%ͷݪଇͬͯԿͰ͔͢ʁʯ ࣭ͬͯʹ͔͑ͨͬͨ
ΞϓϦέʔγϣϯΤϯδχΞ ౡܛ!OB[POPIJUP 4)ࣄۀ෦+6(&.νʔϜ IUUQOB[POPIJUPKVHFNKQ
40-*%ͷݪଇ
Single responsibility principle Open/closed principle Liskov substitution principle Interface segregation
principle Dependency inversion principle ୯Ұͷݪଇ ։์ดͷݪଇ Ϧείϑͷஔݪଇ ΠϯλʔϑΣʔεͷݪଇ ґଘੑٯసͷݪଇ 40-*%ͷݪଇ
%FWFMPQFS3PBENBQ IUUQTHJUIVCDPNLBNSBOBINFETFEFWFMPQFSSPBENBQ
%FWFMPQFS3PBENBQ IUUQTHJUIVCDPNLBNSBOBINFETFEFWFMPQFSSPBENBQ
Single responsibility principle Open/closed principle Liskov substitution principle Interface segregation
principle Dependency inversion principle ୯Ұͷݪଇ ։์ดͷݪଇ Ϧείϑͷஔݪଇ ΠϯλʔϑΣʔεͷݪଇ ґଘੑٯసͷݪଇ 40-*%ͷݪଇ
40-*%ͷݪଇ Single responsibility principle Open/closed principle Liskov substitution principle Interface
segregation principle Dependency inversion principle ୯Ұͷݪଇ ։์ดͷݪଇ Ϧείϑͷஔݪଇ ΠϯλʔϑΣʔεͷݪଇ ґଘੑٯసͷݪଇ ͬͪ͜͡Όͳͯ͘
Single responsibility principle Open/closed principle Liskov substitution principle Interface segregation
principle Dependency inversion principle ୯Ұͷݪଇ ։์ดͷݪଇ Ϧείϑͷஔݪଇ ΠϯλʔϑΣʔεͷݪଇ ґଘੑٯసͷݪଇ 40-*%ͷݪଇ ͬͪ͜ʂʂʂʂ
ͭͷݪଇηοτͷBDSPOZNʢ಄ࣈޠʣͰ͋Δ͜ͱҎ֎ ԿΒͳ͍
ΘΓͱಥʹઆ໌͕࢝·Δ
ಥવฉ͔Εͨ࣌ʹઆ໌͠Α͏ͱ͢Δͱ Ή͍ͣ
ௐͨ ˞ॻ੶ΛಡΊ͔Δൣғࠓճѻ͍·ͤΜ
ྺ࢙తܦҢʹ͍ͭͯ
࡞ͬͨʢൃදͨ͠ʣਓ 3PCFSU$.BSUJO ΞϝϦΧͷιϑτΣΞΤϯδχΞ 6ODMF#PCʢϘϒ͓͡͞ΜʣͷѪশͰΒΕΔ ͍͔ͭ͘ͷιϑτΣΞઃܭݪଇΛ։ൃͨ͠ IUUQTFOXJLJQFEJBPSHXJLJ3PCFSU@$@.BSUJO
IUUQTHSPVQTHPPHMFDPNGPSVN IMFOUPQJDDPNQPCKFDU8*$1%D9".( ॳग़
5FO$PNNBOENFOUT үʂ001ͷ ेռ࡞Ζ͏ͥʂ λΠτϧ༁ɿ
ΫϥεϞδϡʔϧ֦ுʹରͯ͠։͖ɺमਖ਼ʹରͯ͠ด͡ͳ͚ΕͳΒͳ͍ʢ#FSUSBOE.FZFSͷΦʔϓϯΫϩʔζυͷݪଇʣ ੜΫϥεجຊΫϥεͱަՄೳͰͳ͚ΕͳΒͳ͍ʢ-JTLPWͷஔݪଇʣ ৄࡉநʹґଘ͠ͳ͚ΕͳΒͣɺநৄࡉʹґଘͯ͠ͳΒͳ͍ʢґଘੑٯసͷݪଇʣ ࠶ར༻ͷཻͱϦϦʔεͷཻಉ͡ʹ͖͢ ಉ͡ཧ༝Ͱมߋ͞ΕΔΫϥε܈ΛҰͭͷίϯϙʔωϯτʹ·ͱΊΔ͜ͱ
ίϯϙʔωϯτͷϦϦʔε͞ΕΔ୯Ґͱ࠶ར༻ͷ୯Ґಉ͡Ͱ͋Δ͖ ϦϦʔε͞Εͨίϯϙʔωϯτؒͷґଘؔ॥ͯ͠ͳΒͳ͍ ϦϦʔε͞ΕͨίϯϙʔωϯτؒͷґଘͷํɺΑΓ҆ఆͨ͠ํʹ͍ͯͳ͚ΕͳΒͳ͍ ΑΓ҆ఆͨ͠ίϯϙʔωϯτΑΓଟ͘ͷநΫϥεͰߏ͞ΕΔ͖ ՄೳͳݶΓ࣮ূࡁΈͷύλʔϯΛ༻ͯ͠ઃܭ্ͷΛղܾ͢Δ ͭͷύϥμΠϜΛލ͙࣌ඞͣ྆ऀΛ͚ΔΠϯλʔϑΣʔεϨΠϠʔΛΔ͜ͱ طʹ40-*%ͷݪଇͷݪܕ͕͋ͬͨ 3PCFSU$.BSUJOͷߘ ˢʂʁ
ͳΔ΄Ͳɺ40-*%ͷݪଇ 3PCFSU$.BSUJOݸਓͷՌͳΜͩͳʁ
͜ΕΒͷݪଇɺԿेʹٴͿઌਓͷܦݧ ͷੵ͔Βੜ·ΕͨιϑτΣΞֶͷՌ Ͱ͋Δɻ͜ΕΒͷՌҰਓͷ಄͔Βੜ· ΕͨͷͰͳ͍ɻඇৗʹଟ͘ͷιϑτΣ Ξ։ൃऀݚڀऀͷࢥࡧจΛूେͨ͠ ͷͳͷͩɻ ΞδϟΠϧιϑτΣΞ։ൃͷԞٛ ୈ̎෦ɹΞδϟΠϧઃܭ
୯Ұͷݪଇ ։์ดͷݪଇ Ϧείϑͷஔݪଇ ΠϯλʔϑΣʔεͷݪଇ ґଘੑٯసͷݪଇ ൃҊऀɿ#BSCBSB-JTLPW ൃҊऀɿ#FSUSBOE.FZFS ൃҊऀɿ3PCFSU$.BSUJO ൃҊऀɿ3PCFSU$.BSUJO ൃҊऀɿ3PCFSU$.BSUJO
˞5PN%F.BSDPͱ.FJMJS1BHF+POFTͷஶॻʹج͍͍ͮͯΔʁ αϒηοτ࡞͚ͬͨͲɺݸݸҧ͏
ʮݪଇʯͬͯͳΜͩʁ
ݪଇ IUUQTEJDUJPOBSZDBNCSJEHFPSHEJDUJPOBSZFOHMJTIQSJODJQMF zಓಙతͳϧʔϧ·ͨྑ͍ߦಈͷج४z 1SJODJQMF BNPSBMSVMFPSTUBOEBSEPGHPPECFIBWJPVS
ྑ͍Ҿ༻ݩ͕ݟ͔ͭΒͳ͍
ಠࣗղऍͰ͕͢ ݪଇͱ ༗ҙͳ۩ͷཪʹ ීวతʹྲྀΕΔ๏ଇੑ Λநग़ͨ͠ͷ ͱɺଊ͓͑ͯΓ·͢
۩" ۩' ۩# ۩$ ۩% ۩& ᶃ๏ଇੑΛநग़ ᶄ๏ଇੑʹैͬͯ࡞ ݪଇ
۩" ۩' ۩# ۩$ ۩% ۩& ᶃ๏ଇੑΛநग़ ᶄ๏ଇੑʹैͬͯ࡞ ݪଇ ಉ༷ͷੑ࣭Λ͍࣋ͬͯΔ͜ͱ͕ظͰ͖Δ
ྑ͍ઃܭͷίʔυ" ʢͨͿΜྑ͍ઃܭͷʣ ίʔυ' ˞ྑ͍Ҿ༻ݩ͕ݟ͔ͭΒͳ͔ͬͨͷͰࢲݸਓͷਪଌͱͳΓ·͢ ྑ͍ઃܭͷίʔυ# ྑ͍ઃܭͷίʔυ$ ྑ͍ઃܭͷίʔυ% ྑ͍ઃܭͷίʔυ& ᶃ๏ଇੑΛநग़ ᶄ๏ଇੑʹଇͬͨίʔυͷ࡞
40-*%ͷݪଇ
ʮྑ͍ઃܭʯJT $MFBO"SDIJUFDUVSF ୈ***෦ɹઃܭͷݪଇ มߋʹڧ͍͜ͱ ཧղ͍͢͜͠ͱ ίϯϙʔωϯτͷج൫ͱͯ͠ɺଟ͘ͷιϑτΣΞγεςϜͰར༻Ͱ͖Δ͜ͱ
40-*%ͷݪଇ զʑϓϩάϥϚ͕ ९क͖͢ϧʔϧͳͷ͔ʁ
IUUQTTJUFTHPPHMFDPNTJUFVODMFCPCDPOTVMUJOHMMDHFUUJOHBTPMJETUBSU
40-*%ͷݪଇϧʔϧͰ͋Γ·ͤΜ͠ɺ ๏Ͱ͋Γ·ͤΜ͠ɺશͳਅ࣮Ͱ͋Γ·ͤΜɻ ʮϦϯΰݸͰҩऀΒͣʯͱ͍͏ݵ͕͋Γ·͢ɻ ͜Εྑ͍ݪଇͰ͋Γɺྑ͍ΞυόΠεͰ͕͢ɺ ͦΕ७ਮͳਅ࣮Ͱͳ͘ɺ·ͨϧʔϧͰ͋Γ·ͤΜɻ ʢ˞40-*%ͷݪଇͦ͏͍͏ͷͰ͋Δͱݴ͍͍ͨΜͩͱࢥ͏ʣ 5IF40-*%QSJODJQMFTBSFOPUSVMFT5IFZBSFOPUMBXT5IFZBSFOPUQFSGFDUUSVUIT5IFBSFTUBUFNFOUTPOUIFPSEFSPG l"OBQQMFBEBZLFFQTUIFEPDUPSBXBZz5IJTJTBHPPEQSJODJQMF JUJTHPPEBEWJDF CVUJU`TOPUBQVSFUSVUI
OPSJTJUB SVMF
cubby-holes 5IFQSJODJQMFTBSFNFOUBMDVCCZIPMFT5IFZHJWFBOBNFUPBDPODFQUTPUIBUZPVDBOUBMLBOESFBTPOBCPVUUIBU DPODFQU5IFZQSPWJEFBQMBDFUPIBOHUIFGFFMJOHTXFIBWFBCPVUHPPEBOECBEDPEF ͜ͷݪଇͨͪ৺ͷཧ୨ͳͷͰ͢ɻ ͜ΕΒ֓೦ʹର໊ͯ͠લ͚ͯ͘͠ΕΔͷͰɺ ͋ͳͨ֓೦ʹ͍ͭͯͨ͠Γߟ͑ͨΓ͢Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΓ·͢ɻ ͜ΕΒࢲ͕ͨͪྑ͍ίʔυͱѱ͍ίʔυʹ͍͍ͭͯ࣋ͬͯΔ ײͷཧॴΛఏڙ͠·͢ɻ
5IFTFQSJODJQMFTBSFIFVSJTUJDT5IFZBSFDPNNPOTFOTFTPMVUJPOTUPDPNNPOQSPCMFNT5IFZBSFDPNNPOTFOTF EJTDJQMJOFTUIBUDBOIFMQZPVTUBZPVUPGUSPVCMF#VUMJLFBOZIFVSJTUJD UIFZBSFFNQJSJDBMJOOBUVSF5IFZIBWFCFFO PCTFSWFEUPXPSLJONBOZDBTFTCVUUIFSFJTOPQSPPGUIBUUIFZBMXBZTXPSL OPSBOZQSPPGUIBUUIFZTIPVMEBMXBZT CFGPMMPXFE ͜ΕΒͷݪଇώϡʔϦεςΟοΫͰ͢ɻ ͜ΕΒҰൠతͳʹର͢ΔৗࣝతͳղܾࡦͰ͋Γɺ ͋ͳ͕ͨτϥϒϧ͔Βൈ͚ग़͢ͷΛॿ͚Δ͜ͱ͕Ͱ͖ΔৗࣝతͳڭཆͰ͢ɻ ͔͠͠ɺώϡʔϦεςΟοΫͱಉ͡Α͏ʹɺ
͜ΕΒຊ࣭తʹܦݧଇʹجͮ͘ͷͰ͢ɻ ͜ΕΒͷݪଇ͕ଟ͘ͷ߹ʹػೳ͢Δ͜ͱ͕͔͍ͬͯ·͕͢ɺ ৗʹػೳ͢Δͱ͍͏ূڌɺ ͜ΕΒʹৗʹै͏͖Ͱ͋Δͱ͍͏ূڌ͋Γ·ͤΜɻ
ϧʔϧͱ͍͏ΑΓɺ ࢦ ͬͯ දݱͯ͠͠·ͬͨํ͕ޡղগͳͦ͏ ΨΠυϥΠϯ
·ͱΊ w40-*%ͷݪଇ3PCFSU$.BSUJO͕·ͱΊͨͷ wྑ͍ઃܭͷ๏ଇੑΛநग़ͨ͠ͷͰɺݪଇΛҙࣝͨ͠ίʔυΛॻ͘͜ ͱʹΑͬͯྑ͍ઃܭͷίʔυʹͳΔ͜ͱ͕ظͰ͖Δ wࣗͷߟ͑Λཧͨ͠Γɺઃܭͷྑ͠ѱ͠Λஅͨ͠ΓɺνʔϜͷڞ ௨ݴޠج൫ʹͳΔͳͲͷޮՌظͰ͖Δ wతʹै͏͖ϧʔϧͱ͍͏ͷͰͳ͘ɺࢀߟʹ͢Δͱͤʹͳ ΔΨΠυϥΠϯఔͷظײͰࢀর͢Δͱྑͦ͞͏
·ͱΊ w40-*%ͷݪଇ3PCFSU$.BSUJO͕·ͱΊͨͷ wྑ͍ઃܭͷ๏ଇੑΛநग़ͨ͠ͷͰɺݪଇΛҙࣝͨ͠ίʔυΛॻ͘͜ ͱʹΑͬͯྑ͍ઃܭͷίʔυʹͳΔ͜ͱ͕ظͰ͖Δ wࣗͷߟ͑Λཧͨ͠Γɺઃܭͷྑ͠ѱ͠Λஅͨ͠ΓɺνʔϜͷڞ ௨ݴޠج൫ʹͳΔͳͲͷޮՌظͰ͖Δ wతʹै͏͖ϧʔϧͱ͍͏ͷͰͳ͘ɺࢀߟʹ͢Δͱͤʹͳ ΔΨΠυϥΠϯఔͷظײͰࢀর͢Δͱྑͦ͞͏ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠