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の原則って何ですか?」って質問に答えたかった / What's SOLID pri...
Search
Satoshi Kawashima
January 30, 2019
Programming
6
2.2k
「SOLIDの原則って何ですか?」って質問に答えたかった / What's SOLID principle
書籍を読んでもわりと唐突に始まるSOLIDの原則
いざ自分が説明しようとすると結構難儀する代物だと思いますので、それっぽく説明ができるように調べたみたお話です
Satoshi Kawashima
January 30, 2019
Tweet
Share
More Decks by Satoshi Kawashima
See All by Satoshi Kawashima
モジュラモノリスにおけるトランザクション設計の考え方 / transaction design on modular monolith
nazonohito51
16
9.6k
BASE大規模リアーキテクチャリング / base_rearchitecturing
nazonohito51
17
13k
既存サービスに後からR/W Splittingライブラリを入れる時に考えたこと / r-w-splitting
nazonohito51
1
30k
社内勉強会でOOPとCleanArchitectureとDDDを勉強し始めたというお話
nazonohito51
7
5.4k
CakePHP2でもPhpStormがコード補完してくれるようにした話 / cakephp2-ide-helper
nazonohito51
1
2.6k
PHPStanでCustomRuleを作る / Make PHPStan CustomRule
nazonohito51
6
4.4k
単方向依存を実現する静的解析ライブラリのご紹介 / Analyze PHP Dependencies
nazonohito51
3
6.1k
ドキュメントルート配下に全てのPHPファイルが置かれていた環境をindex.phpだけにした話 / document root
nazonohito51
2
4k
アジャイル開発でのソフトウェア設計
nazonohito51
0
900
Other Decks in Programming
See All in Programming
株式会社 Sun terras カンパニーデック
sunterras
0
1.9k
CSC307 Lecture 13
javiergs
PRO
0
310
CSC307 Lecture 11
javiergs
PRO
0
580
Rails Girls Tokyo 18th GMO Pepabo Sponsor Talk
yutokyokutyo
0
180
並行開発のためのコードレビュー
miyukiw
2
2.1k
Claude Codeと2つの巻き戻し戦略 / Two Rewind Strategies with Claude Code
fruitriin
0
200
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
440
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
360
朝日新聞のデジタル版を支えるGoバックエンド ー価値ある情報をいち早く確実にお届けするために
junkiishida
1
280
Raku Raku Notion 20260128
hareyakayuruyaka
0
420
メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
nikkei_engineer_recruiting
0
130
CSC307 Lecture 10
javiergs
PRO
1
690
Featured
See All Featured
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
180
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
620
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
92
Information Architects: The Missing Link in Design Systems
soysaucechin
0
810
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
230
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
The Pragmatic Product Professional
lauravandoore
37
7.2k
Context Engineering - Making Every Token Count
addyosmani
9
720
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
120
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
170
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
450
Designing Powerful Visuals for Engaging Learning
tmiket
0
250
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తʹै͏͖ϧʔϧͱ͍͏ͷͰͳ͘ɺࢀߟʹ͢Δͱͤʹͳ ΔΨΠυϥΠϯఔͷظײͰࢀর͢Δͱྑͦ͞͏ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠