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
依存性の注入とは?
Search
Tomoki Ota
June 13, 2024
Programming
0
36
依存性の注入とは?
依存性の注入についてまとめました。
Tomoki Ota
June 13, 2024
Tweet
Share
More Decks by Tomoki Ota
See All by Tomoki Ota
【超難問】絶対に解けないJavaScriptクイズ8選
tomo1227
0
450
ドラ🔵もんでDIを学ぶ
tomo1227
0
4.7k
go100tips6-10.pdf
tomo1227
0
13k
Go言語100Tips No.1~5 まとめ
tomo1227
0
13k
Other Decks in Programming
See All in Programming
KotlinのLinter まなびなおし2024
nyafunta9858
0
1.7k
過去や未来を扱うのは難しい? 過去と未来に立ち向かうための勘所
shinpeim
2
390
CSC307 Lecture 03
javiergs
PRO
0
130
スクラムチームに入れないという選択: フルサイクルチームにおける開発者のステップアップ / Why We Don’t Add Newbies to Our Scrum Team
yuk4w4
3
1.5k
イベント駆動アーキテクチャ導入の手引きと共通の落とし穴 / Guide to Implementing Event-Driven Architecture and Common Pitfalls
nrslib
12
3.9k
開発生産性の観点から考える自動テスト(2024/06版) / Automated Test Knowledge from Savanna 202406 Findy dev-prod-con edition
twada
PRO
11
2.2k
[Flutter] Unitテストの基礎を理解する
haruki_uiru
0
150
Kotlin Script 활용하기
kciter
0
120
ボトムアップではじめるFour Keys・SPACEを用いた開発プロセスの改善事例 〜開発生産性に向き合ってチームの成長を実感する〜
nomuson
1
250
我々はなぜテストを書くのか / Why we write test codes
takaking22
6
690
自分好みの TS バンドラを Rust で作れる!Deno の内部ライブラリの活用 – Denoで変わるランタイムの景色 実践事例 Lunch LT
pizzacat83
4
530
プラットフォームエンジニアリングを 普及と実践し続けて見えてきた利点とリスク
zawa_zawa0210
2
750
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
35
13k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.8k
Robots, Beer and Maslow
schacon
PRO
155
8k
WebSockets: Embracing the real-time Web
robhawkes
59
7.1k
Testing 201, or: Great Expectations
jmmastey
32
6.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
23
1.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
119
18k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Adopting Sorbet at Scale
ufuk
69
8.7k
Producing Creativity
orderedlist
PRO
338
39k
Build your cross-platform service in a week with App Engine
jlugia
227
17k
Designing for Performance
lara
603
67k
Transcript
%* 5PNPLJ0UB 1
ԿΛֶͿ͔ w ґଘੑͷೖͷతɺ֓ཁ w ૄ݁߹ w %*ͷύλʔϯͱΞϯνύλʔϯ w 40-*%ݪଇ w
ΞεϖΫτࢦϓϩάϥϛϯά w 1VSF%*ͱ%*ίϯςφ 2
ୈճґଘੑೖͱ 3
ୈճΞδΣϯμ wґଘੑͷೖͱ wґଘੑͷೖͷޡղ wґଘੑͷೖʹඞཁͳࣝ wґଘੑͷೖͷత wૄ݁߹ 4
ґଘੑͷೖʹࣅͨݴ༿ w ґଘੑͷೖ %FQFOEFODZ*OKFDUJPO w ґଘؔٯసͷݪଇʢ%FQFOEFODZ*OWFSTJPO w ੍ޚͷస
*P$ w αʔυɾύʔςΟଓ UIJSEQBSUZDPOOFDU w αʔϏεɾϩέʔλ 4FSWJDF-PDBUPS 5
ґଘੑͷೖͱ 6 ґଘੑͷೖ ϕΞϧωʔθιʔε
ґଘੑͷೖͱ 7 ϕΞϧωʔθιʔεͱʁ ཛͱόλʔͷιʔεɻ ΤετϥΰϯɺΤγϟ ϩοτɺηϧϑΟʔ Ϣɺਣ͕ݪࡐྉɻ
ґଘੑͷೖͱ 8 ϕΞϧωʔθιʔεͱʁ ϑϨϯνͰجຊతͳιʔεɻ ్தͰࣦഊͨ͠Βͤͳ͍ɻ࡞ ʹ͕͔͔࣌ؒΔɻ
ґଘੑͷೖͱ ༷ʑͳιϑτΣΞઃܭͷݪଇύλʔϯΛूΊͨ ͷͰ͋Γɺίʔυ͕ૄ݁߹ MPPTFDPVQMJOH ͱͳ ΔΑ͏ͳ։ൃΛߦ͑ΔΑ͏ʹ͢ΔͷͰ͋Δɻ 9
ґଘੑͷೖͱ ࡀࣇWFS ͠ɺ܅͕ॴʹߦͬͯɺྫྷଂݿ͔Βউखʹ৯ҿΈΛͱ͖ͬͯͨ ΒɺޙͰʹͳΔΑͶʁྫ͑ɺྫྷଂݿͷυΞΛดΊΕͨΓɺϚϚύ ύ͕܅ʹ৯ͯཉ͘͠ͳ͍ͱࢥ͍ͬͯΔͷΛ৯ͯ͠·ͬͨΓ͢Δ͔͠ Εͳ͍͠ɺ͔ͨ͠͠Βɺ܅͕୳͍ͯ͠Δͷͦͦྫྷଂݿʹೖ͍ͬͯ ͳ͔ͬͨΓɺ͢Ͱʹຯظݶ͕͖Ε͍ͯͨΓ͢Δ͜ͱ͋Δ͠Ͷɻ͜ͷΑ͏ ͳ߹ɺ܅͕Δ͖͜ͱϚϚύύʹ܅͕ԿΛඞཁͱ͍ͯ͠Δͷ͔Λ ͑Δ͜ͱͳΜͩΑɻྫ͑ɺʮ͓ன͝൧Λ৯Δ͔ΒԿ͔ҿΈΛͱͬͯʯ ͱ͔͞ɻͦ͏͢ΔͱϚϚύύ܅ʹԿ͔Λ͖࣋ͬͯͯ͘ΕΔΜͩΑʯ
10
ґଘੑͷೖͱ ࡀࣇWFS αʔϏεΛඞཁͱ͢ΔΫϥε ࡀࣇ ɺඞཁͳαʔϏε Λఏڙ͢ΔΑ͏ʹج൫ ʹཔΔ͖Ͱ͋Δͱ͍͏͜ͱɻ 11
αʔϏεͱίϯϙʔωϯτ αʔϏεநͷ͜ͱɻͲͷΑ͏ͳαʔϏεΛఏڙ͢Δ͔Λࣔ͢ͷ ίϯϙʔωϯτநΛ࣮ͨ͠Ϋϥε 12
%*ʹؔ͢Δޡղ • ґଘੑೖԆόΠϯσΟϯάΛߦ͏࣌ʹ͔͠༻͍ΒΕͳ͍ • ୯ମςετΛ͢Δ࣌ʹ͚ͩؔͯ͘͠Δ • υʔϐϯάΛͨ͠Abstract FactoryύλʔϯͷΑ͏ͳͷ • ґଘੑೖΛಋೖ͢ΔʹDIίϯςφ͕ඞཁ
13
ԆόΠϯσΟϯά 14 ίʔυΛ࠶ίϯύΠϧ͢Δ͜ͱͳ͘ɺ ΞϓϦέʔγϣϯͷҰ෦ΛऔΓସ͑ΒΕΔػೳ FH74$PEFͳͲ ԆόΠϯσΟϯάͷͨΊʹ%*Λ͢ΔΘ͚Ͱͳ͍
୯ମςετʹؔ͢Δޡղ 15 5%%ͷͨΊ͚ͩʹ%*͢ΔΘ͚Ͱͳ͍ɻ
"CTUSBDU'BDUPSZύλʔϯͱ 16 ෳͷϝιουΛඋ͑ͨநͰ͋Γɺϝιου͝ͱ ʹಛఆͷछྨͷΦϒδΣΫτ͕ੜͰ͖ΔΑ͏ʹ͢ Δͷɻ
υʔϐϯάͨ͠"CTUSBDU'BDUPSZύλʔϯͰ͋Δͱ͍͏ޡղ 17 ґଘੑೖΛ͢Δ͜ͱͰɺଞͷαʔϏε ந Λݟͭ ͚ग़͢ͷΞϯνύλʔϯɻˠαʔϏεɾϩέʔλʔ
αʔϏεɾϩέʔλʔ 18 %*ͱશ͘ରۃͳ֓೦
αʔϏεɾϩέʔλʔ 19 %*ɺ໋ྩతͳίʔυͰґଘΛཁٻ͠ͳͯ͘ɺͦͷґଘΛ༻͍ͨΦ ϒδΣΫτΛੜͰ͖ΔΑ͏ʹ͢Δํ๏ɻґଘΛඞཁͱ͢ΔΫϥεΛ ར༻͢Δίʔυʹରͯ͠ɺͦͷґଘΛఏڙͤ͞ΔΑ͏ʹ͢Δͷɻ
%*ίϯςφʹؔ͢Δޡղ 20 %*ίϯςφ༷ʑͳΫϥεͷΦϒδΣΫτΛΈ߹ΘͤΔ͜ͱΛ༰қ ʹߦ͑ΔΑ͏ʹ͢ΔҙͷϥΠϒϥϦɻ %*ίϯςφΛΘͳ͍%*Λ1VSF%*ͱ͍͏ɻ
%*ʹඞཁͳࣝ 21 w40-*%ݪଇ wΫϦʔϯίʔυ wΞεϖΫτࢦϓϩάϥϛϯά
40-*%ݪଇͱ w 4JOHMF3FTQPOTJCJMJUZ1SJODJQMF w 0QFO$MPTFE1SJODJQMF w -JTLPW4VCTUJUVUJPO1SJODJQMF w *OUFSGBDF4FHSFHBUJPO1SJODJQMF w
%FQFOEFODZ*OWFSTJPO1SJODJQMF 22
%*ͱؔͷ͋Δͭͷύλʔϯ 23 w%FDPSBUPSύλʔϯ w$PNQPTJUFύλʔϯ w"EBQUFSύλʔϯ w/VMMΦϒδΣΫτ
ґଘੑͷೖͷత 24 wอक༰қੑͷ্ ˠૄ݁߹ͳઃܭʹ͢Δ
ΦϒδΣΫτಉ࢜ͷີ݁߹ 25
ૄ݁߹ 26
ίϯηϯτͱϓϥά 27 wίϯηϯτΠϯλʔϑΣΠε ந wϓϥάΠϯλʔϑΣΠεͷ࣮ ۩ମ
Ϧείϑͷஔݪଇ -41 28
Ϧείϑͷஔݪଇ -41 29 w4ܕͷΦϒδΣΫτPͷ֤ʑʹɺରԠ͢Δ5ܕͷΦϒδΣΫτ P͕ͭଘࡏ͠ɺ5Λͬͯఆٛ͞ΕͨϓϩάϥϜ1ʹରͯ͠ PͷΘΓʹPΛͬͯ1ͷৼΔ͍͕มΘΒͳ͍߹ɺ 45ͷੜܕͰ͋Δͱݴ͑ΔɻCZ#BSCBSB-JTLPW wੜܕʹґଘ͍͚ͯ͠ͳ͍ɻੜܕɺੜͱͷํʹஔ ՄೳͰͶ͚ΕͳΒͳ͍ɻ
Ϧείϑͷஔݪଇ -41 30 কདྷʹߟ͑Β͑Δ৽ͨͳཁٻʹରԠ͢ΔͨΊͷݪଇ
Ϧείϑͷஔݪଇ -41 31 কདྷʹߟ͑Β͑Δ৽ͨͳཁٻʹରԠ͢ΔͨΊͷݪଇ
32 ίϯηϯτ͕։͖ͬͺͳͩ͠ͱةͳ͍ ײిͨ͠Γ͢ΔՄೳੑ͕͋Δ
/VMMΦϒδΣΫτ 33
/VMMΦϒδΣΫτ 34 αʔϏεΛ͏͜ͱΛఆ࣮ͨ͠ʹ͕ͯͨ͠ɺαʔϏε͕ར༻ Ͱ͖ͳ͍߹ɺࢀরઌ͕ͳ͍͜ͱͰ/VMM3FGFSFODF&YDFQUJPOʹ ͋ΔͷΛ͙
/VMMΦϒδΣΫτ 35 αʔϏεΛ͏͜ͱΛఆ࣮ͨ͠ʹ͕ͯͨ͠ɺαʔϏε͕ར༻ Ͱ͖ͳ͍߹ɺࢀরઌ͕ͳ͍͜ͱͰ/VMM3FGFSFODF&YDFQUJPOʹ ͋ΔͷΛ͙
36 ͠ఀిͨ͠Βɻɻɻɻ
37 %FDPSBUPSύλʔϯ
38 %FDPSBUPSύλʔϯ ΠϯλʔϑΣΠεͷ࣮Ϋϥεʹରͯ͠ɺಉ͡Πϯ λʔϑΣΠεͷผͷ࣮ΫϥεΛհೖ JOUFSDFQUJPO ͤͯ͞৽ͨͳػೳΛՃ͑Δઃܭύλʔϯ
39 %FDPSBUPSύλʔϯͷత ৽ͨͳػೳԣஅతؔ৺͝ͱΛطଘͷίʔυΛॻ͖ ͑Δ͜ͱͳ͘ՃͰ͖ΔΑ͏ʹͳΔ
40 614ͱίϯϐϡʔλ ͦΕͧΕҟͳΔతΛ࣋ͭ ˠ୯Ұͷݪଇ ˠͦΕͧΕ͕ӨڹΛड͚Δ͜ͱ͕ͳ͍
41 ͭͷίϯηϯτͰ ෳͷՈిΛಉ࣌ʹ͍͍ͨ
42 $PNQPTJUFύλʔϯ
43 $PNQPTJUFύλʔϯ
44 $PNQPTJUFύλʔϯ ΠϯλʔϑΣΠεͷطଘͷ࣮Ϋϥεʹର ͯ͠ɺผͷ৽ͨͳ࣮ΫϥεΛՃ͑Δɻ
45 ւ֎ʹߦ͘ͱίϯηϯτͱ ϓϥάͷܗ͕Ұக͠ͳ͘ͳΔ
46 "EBQUFSύλʔϯ
47 "EBQUFSύλʔϯ ҟͳΔΠϯλʔϑΣΠεͰɺΞμϓλΛ հͯ͠͏͜ͱ͕Ͱ͖Δɻ
48 "EBQUFSύλʔϯ ΞϓϦέʔγϣϯ͕ར༻͢ΔΠϯλʔϑΣ ΠεΛհͯ͠طଘͷαʔυύʔςΟͷ"1* Λར༻͍ͨ͠ͱ͖ʹ༗ޮ
49 ΦʔϓϯɾΫϩʔζυͷݪଇ 0$1 طଘͷίʔυΛมߋ͢Δ͜ͱͳ͘ɺΞϓϦέ ʔγϣϯΛ֦ுͰ͖ΔΑ͏ʹ͢Δͱ͍͏֓೦
50 ΦʔϓϯɾΫϩʔζυͷݪଇ 0$1 ֦ுʹରͯ͠0QFO มߋʹରͯ͠$MPTFE
51 ૄ݁߹ʹ͢Δίπ ࣮ʹରͯ͠ɺϓϩάϥϛϯά͢Δͷ Ͱͳ͘ɺΠϯλʔϑΣΠεʹରͯ͠ ϓϩάϥϛϯάΛ͢Δ
52 ·ͱΊ ૄ݁߹ɺίϯηϯτͱϓϥάͷΑ͏ʹଟ ͘ͷ࢈Ή w614%FDPSBUFSύλʔϯ wిݯλοϓ$PNQPTJUύλʔϯ wίϯηϯτΧόʔ/VMMPCKFDU
wΞμϓλʔ"EBQUFSύλʔϯ wίϯηϯτͱϓϥάϦείϑͷஔݪଇ w614ͱ1$୯Ұͷݪଇ w֦ு͍ͯ֓͘͠೦ΦʔϓϯɾΫϩʔζυ ͷݪଇ
53 ·ͱΊ ґଘੑͷೖͱɺ༷ʑͳιϑτΣΞઃܭ ͷݪଇύλʔϯΛूΊͨͷͰ͋Γɺίʔ υ͕ૄ݁߹ʹͳΔΑ͏ʹଅ͢ɻͦͯ͠ɺૄ݁ ߹ʹ͢Δ͜ͱͰɺίʔυʹର͢Δอक༰қੑ ্͕͢Δɻ