書籍を読んでもわりと唐突に始まるSOLIDの原則 いざ自分が説明しようとすると結構難儀する代物だと思いますので、それっぽく説明ができるように調べたみたお話です
ౡܛ(.01FQBCP *OD1)1ษڧձʮ40-*%ͷݪଇͬͯԿͰ͔͢ʁʯ࣭ͬͯʹ͔͑ͨͬͨ
View Slide
ΞϓϦέʔγϣϯΤϯδχΞౡܛ!OB[POPIJUP4)ࣄۀ෦+6(&.νʔϜIUUQOB[POPIJUPKVHFNKQ
40-*%ͷݪଇ
Single responsibility principleOpen/closed principleLiskov substitution principleInterface segregation principleDependency inversion principle୯Ұͷݪଇ։์ดͷݪଇϦείϑͷஔݪଇΠϯλʔϑΣʔεͷݪଇґଘੑٯసͷݪଇ40-*%ͷݪଇ
%FWFMPQFS3PBENBQ IUUQTHJUIVCDPNLBNSBOBINFETFEFWFMPQFSSPBENBQ
40-*%ͷݪଇSingle responsibility principleOpen/closed principleLiskov substitution principleInterface segregation principleDependency inversion principle୯Ұͷݪଇ։์ดͷݪଇϦείϑͷஔݪଇΠϯλʔϑΣʔεͷݪଇґଘੑٯసͷݪଇͬͪ͜͡Όͳͯ͘
Single responsibility principleOpen/closed principleLiskov substitution principleInterface segregation principleDependency inversion principle୯Ұͷݪଇ։์ดͷݪଇϦείϑͷஔݪଇΠϯλʔϑΣʔεͷݪଇґଘੑٯసͷݪଇ40-*%ͷݪଇͬͪ͜ʂʂʂʂ
ͭͷݪଇηοτͷBDSPOZNʢ಄ࣈޠʣͰ͋Δ͜ͱҎ֎ԿΒͳ͍
ΘΓͱಥʹઆ໌͕࢝·Δ
ಥવฉ͔Εͨ࣌ʹઆ໌͠Α͏ͱ͢ΔͱΉ͍ͣ
ௐͨ˞ॻ੶ΛಡΊ͔Δൣғࠓճѻ͍·ͤΜ
ྺ࢙తܦҢʹ͍ͭͯ
࡞ͬͨʢൃදͨ͠ʣਓ3PCFSU$.BSUJOΞϝϦΧͷιϑτΣΞΤϯδχΞ6ODMF#PCʢϘϒ͓͡͞ΜʣͷѪশͰΒΕΔ͍͔ͭ͘ͷιϑτΣΞઃܭݪଇΛ։ൃͨ͠[email protected][email protected]
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ͷஶॻʹج͍͍ͮͯΔʁαϒηοτ࡞͚ͬͨͲɺݸݸҧ͏
ʮݪଇʯͬͯͳΜͩʁ
ݪଇIUUQTEJDUJPOBSZDBNCSJEHFPSHEJDUJPOBSZFOHMJTIQSJODJQMFzಓಙతͳϧʔϧ·ͨྑ͍ߦಈͷج४z1SJODJQMFBNPSBMSVMFPSTUBOEBSEPGHPPECFIBWJPVS
ྑ͍Ҿ༻ݩ͕ݟ͔ͭΒͳ͍
ಠࣗղऍͰ͕͢ݪଇͱ༗ҙͳ۩ͷཪʹීวతʹྲྀΕΔ๏ଇੑΛநग़ͨ͠ͷͱɺଊ͓͑ͯΓ·͢
۩" ۩'۩# ۩$ ۩% ۩&ᶃ๏ଇੑΛநग़ ᶄ๏ଇੑʹैͬͯ࡞ݪଇ
۩" ۩'۩# ۩$ ۩% ۩&ᶃ๏ଇੑΛநग़ ᶄ๏ଇੑʹैͬͯ࡞ݪଇಉ༷ͷੑ࣭Λ͍࣋ͬͯΔ͜ͱ͕ظͰ͖Δ
ྑ͍ઃܭͷίʔυ" ʢͨͿΜྑ͍ઃܭͷʣίʔυ'˞ྑ͍Ҿ༻ݩ͕ݟ͔ͭΒͳ͔ͬͨͷͰࢲݸਓͷਪଌͱͳΓ·͢ྑ͍ઃܭͷίʔυ#ྑ͍ઃܭͷίʔυ$ྑ͍ઃܭͷίʔυ%ྑ͍ઃܭͷίʔυ&ᶃ๏ଇੑΛநग़ ᶄ๏ଇੑʹଇͬͨίʔυͷ࡞40-*%ͷݪଇ
ʮྑ͍ઃܭʯJT$MFBO"SDIJUFDUVSFୈ***෦ɹઃܭͷݪଇมߋʹڧ͍͜ͱཧղ͍͢͜͠ͱίϯϙʔωϯτͷج൫ͱͯ͠ɺଟ͘ͷιϑτΣΞγεςϜͰར༻Ͱ͖Δ͜ͱ
40-*%ͷݪଇզʑϓϩάϥϚ͕९क͖͢ϧʔϧͳͷ͔ʁ
IUUQTTJUFTHPPHMFDPNTJUFVODMFCPCDPOTVMUJOHMMDHFUUJOHBTPMJETUBSU
40-*%ͷݪଇϧʔϧͰ͋Γ·ͤΜ͠ɺ๏Ͱ͋Γ·ͤΜ͠ɺશͳਅ࣮Ͱ͋Γ·ͤΜɻʮϦϯΰݸͰҩऀΒͣʯͱ͍͏ݵ͕͋Γ·͢ɻ͜Εྑ͍ݪଇͰ͋Γɺྑ͍ΞυόΠεͰ͕͢ɺͦΕ७ਮͳਅ࣮Ͱͳ͘ɺ·ͨϧʔϧͰ͋Γ·ͤΜɻʢ˞40-*%ͷݪଇͦ͏͍͏ͷͰ͋Δͱݴ͍͍ͨΜͩͱࢥ͏ʣ5IF40-*%QSJODJQMFTBSFOPUSVMFT5IFZBSFOPUMBXT5IFZBSFOPUQFSGFDUUSVUIT5IFBSFTUBUFNFOUTPOUIFPSEFSPGl"OBQQMFBEBZLFFQTUIFEPDUPSBXBZz5IJTJTBHPPEQSJODJQMF JUJTHPPEBEWJDF CVUJU`TOPUBQVSFUSVUI OPSJTJUBSVMF
cubby-holes5IFQSJODJQMFTBSFNFOUBMDVCCZIPMFT5IFZHJWFBOBNFUPBDPODFQUTPUIBUZPVDBOUBMLBOESFBTPOBCPVUUIBUDPODFQU5IFZQSPWJEFBQMBDFUPIBOHUIFGFFMJOHTXFIBWFBCPVUHPPEBOECBEDPEF͜ͷݪଇͨͪ৺ͷཧ୨ͳͷͰ͢ɻ͜ΕΒ֓೦ʹର໊ͯ͠લ͚ͯ͘͠ΕΔͷͰɺ͋ͳͨ֓೦ʹ͍ͭͯͨ͠Γߟ͑ͨΓ͢Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΓ·͢ɻ͜ΕΒࢲ͕ͨͪྑ͍ίʔυͱѱ͍ίʔυʹ͍͍ͭͯ࣋ͬͯΔײͷཧॴΛఏڙ͠·͢ɻ
5IFTFQSJODJQMFTBSFIFVSJTUJDT5IFZBSFDPNNPOTFOTFTPMVUJPOTUPDPNNPOQSPCMFNT5IFZBSFDPNNPOTFOTFEJTDJQMJOFTUIBUDBOIFMQZPVTUBZPVUPGUSPVCMF#VUMJLFBOZIFVSJTUJD UIFZBSFFNQJSJDBMJOOBUVSF5IFZIBWFCFFOPCTFSWFEUPXPSLJONBOZDBTFTCVUUIFSFJTOPQSPPGUIBUUIFZBMXBZTXPSL OPSBOZQSPPGUIBUUIFZTIPVMEBMXBZTCFGPMMPXFE͜ΕΒͷݪଇώϡʔϦεςΟοΫͰ͢ɻ͜ΕΒҰൠతͳʹର͢ΔৗࣝతͳղܾࡦͰ͋Γɺ͋ͳ͕ͨτϥϒϧ͔Βൈ͚ग़͢ͷΛॿ͚Δ͜ͱ͕Ͱ͖ΔৗࣝతͳڭཆͰ͢ɻ͔͠͠ɺώϡʔϦεςΟοΫͱಉ͡Α͏ʹɺ͜ΕΒຊ࣭తʹܦݧଇʹجͮ͘ͷͰ͢ɻ͜ΕΒͷݪଇ͕ଟ͘ͷ߹ʹػೳ͢Δ͜ͱ͕͔͍ͬͯ·͕͢ɺৗʹػೳ͢Δͱ͍͏ূڌɺ͜ΕΒʹৗʹै͏͖Ͱ͋Δͱ͍͏ূڌ͋Γ·ͤΜɻ
ϧʔϧͱ͍͏ΑΓɺࢦͬͯදݱͯ͠͠·ͬͨํ͕ޡղগͳͦ͏ΨΠυϥΠϯ
·ͱΊw40-*%ͷݪଇ3PCFSU$.BSUJO͕·ͱΊͨͷwྑ͍ઃܭͷ๏ଇੑΛநग़ͨ͠ͷͰɺݪଇΛҙࣝͨ͠ίʔυΛॻ͘͜ͱʹΑͬͯྑ͍ઃܭͷίʔυʹͳΔ͜ͱ͕ظͰ͖Δwࣗͷߟ͑Λཧͨ͠Γɺઃܭͷྑ͠ѱ͠Λஅͨ͠ΓɺνʔϜͷڞ௨ݴޠج൫ʹͳΔͳͲͷޮՌظͰ͖Δwతʹै͏͖ϧʔϧͱ͍͏ͷͰͳ͘ɺࢀߟʹ͢ΔͱͤʹͳΔΨΠυϥΠϯఔͷظײͰࢀর͢Δͱྑͦ͞͏
·ͱΊw40-*%ͷݪଇ3PCFSU$.BSUJO͕·ͱΊͨͷwྑ͍ઃܭͷ๏ଇੑΛநग़ͨ͠ͷͰɺݪଇΛҙࣝͨ͠ίʔυΛॻ͘͜ͱʹΑͬͯྑ͍ઃܭͷίʔυʹͳΔ͜ͱ͕ظͰ͖Δwࣗͷߟ͑Λཧͨ͠Γɺઃܭͷྑ͠ѱ͠Λஅͨ͠ΓɺνʔϜͷڞ௨ݴޠج൫ʹͳΔͳͲͷޮՌظͰ͖Δwతʹै͏͖ϧʔϧͱ͍͏ͷͰͳ͘ɺࢀߟʹ͢ΔͱͤʹͳΔΨΠυϥΠϯఔͷظײͰࢀর͢Δͱྑͦ͞͏͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠