Dependency Injection in Scala
by
Yuki Ishikawa
×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Dependency Injection in Scala גࣜձࣾϑΝϯίϛϡχέʔγϣϯζ ੴ ༟थ
Slide 2
Slide 2 text
Profile • ϑΝϯίϛೖࣾ4 • Scalaྺ2͘Β͍ (લ: Java, Ruby, Perl,PHP, etc.) • nend, nex8, viidleͷ৴γεςϜߏஙΛ୲ • ࠷ۙϒϩοΫνΣʔϯͷษڧΛͨ͠Γ ੴ ༟थ Yuki Ishikawa
Slide 3
Slide 3 text
Dependency Injection (DI) ͱԿ͔ʁ
Slide 4
Slide 4 text
Dependency Injection (DI) ͱԿ͔ʁ ίϯϙʔωϯτؒͷґଘؔΛϓϩάϥϜͷ ιʔείʔυ͔Βഉআ͠ɺ֎෦ͷઃఆϑΝΠ ϧͳͲͰೖͰ͖ΔΑ͏ʹ͢ΔιϑτΣΞ ύλʔϯͰ͋Δɻ WikipediaΑΓ https://ja.wikipedia.org/wiki/ґଘੑͷೖ
Slide 5
Slide 5 text
"E$POUSPMMFS "E4FSWJDF "E4FSWJDF*NQM Dependency Injection (DI) ͱԿ͔ʁ .PEVMF *OKFDUPS AdController: ࠂϦΫΤετͷϋϯυϦϯά AdService: ࠷దͳࠂͷબग़ϩδοΫ
Slide 6
Slide 6 text
Dependency Injection (DI) ͱԿ͔ʁ Manual DIʹΑΔ࣮ྫɻDIͷํ๏Կछྨଘࡏ͢Δ
Slide 7
Slide 7 text
Dependency Injection (DI) ͱԿ͔ʁ Manual DIʹΑΔ࣮ྫɻDIͷํ๏Կछྨଘࡏ͢Δ wiring(ઢ)
Slide 8
Slide 8 text
Կ͕خ͍͠ͷ?
Slide 9
Slide 9 text
Կ͕خ͍͠ͷʁ ‣ ݁߹ͷԼɾίϯϙʔωϯτԽͷଅਐ ‣ ୯ମςετ͕͘͢͠ͳΔ
Slide 10
Slide 10 text
ScalaͰDI͢Δํ๏
Slide 11
Slide 11 text
• MacWire • Guice • Spring • Scaldi • SubCut • Freestyle (Free Monad & Taggless Final) Pure Scala Library • Manual DI • Cake Pattern • Reader Monad • Free Monad • Tagless Final ScalaͷDIύλʔϯ
Slide 12
Slide 12 text
͕࣌ؒ͋·Γແ͍ͷͰ • Manual DI • Cake Pattern • MacWire • Guice ͷ̐छྨΛհ͠·͢ʂ
Slide 13
Slide 13 text
Manual DI (Constructor Injection) • ίϯετϥΫλҾΛͬͯख࡞ۀͰઢ • Ұ൪؆୯ʹDI͢Δํ๏
Slide 14
Slide 14 text
Manual DI (Constructor Injection) ख࡞ۀͰઢ͢Δ
Slide 15
Slide 15 text
Manual DI (Constructor Injection) ςετ͢Δͱ͖ܧঝͯ͠mock/stubͰ্ॻ͖͢ΕOK
Slide 16
Slide 16 text
Manual DI (Constructor Injection) Pros Cons • Ұ൪खܰʹ࢝ΊΒΕΔํ๏ • Compile-time DI • Pure Scala • ґଘ͕ؔଟ͍ͱઢ࡞ۀ͕ͭΒ͍ খنͷϓϩδΣΫτͳΒManualͰे!!
Slide 17
Slide 17 text
Cake Pattern • ίϯετϥΫλҾΛ༻͠ͳ͍໘ന͍Ξϓϩʔν ‣ ࣗܕΞϊςʔγϣϯܧঝͰDI͢Δ • nendͰ࠾༻͍ͯ͠Δ • આ໌͕͍͠
Slide 18
Slide 18 text
Cake Pattern ίϯϙʔωϯτΛ࡞
Slide 19
Slide 19 text
Cake Pattern MixinͰΦϒδΣΫτΛೖ͢Δ
Slide 20
Slide 20 text
Cake Pattern Minimal Cake Pattern υϫϯΰΞΧϯτγεςϜͰ࠾༻͞Ε͍ͯΔख๏ ʢࣗܕΞϊςʔγϣϯ͕ొ͠ͳ͍ͷͰཧղ͍͢͠ʣ https://qiita.com/pab_tech/items/1c0bdbc8a61949891f1f
Slide 21
Slide 21 text
Cake Pattern Pros Cons • Compile-time DI • Pure Scala • େྔͷϘΠϥʔϓϨʔτ • ॊೈੑ͕͍ ‣ Component͕ΠϯελϯεΛ͔̍ͭ࣋ͯ͠ͳ͍ͷͰɺ2ͭͷಉ͡ ܕʹґଘͰ͖ͳ͍ • ύϑΥʔϚϯεɾίϯύΠϧ࣌ؒʹѱӨڹʁ(ະݕূ)
Slide 22
Slide 22 text
MacWire • Scala༻ϥΠϒϥϦ • ϚΫϩͰઢͯ͘͠ΕΔ • viidleͰ࠾༻͍ͯ͠Δ • Adam Warski͞Μ͕࡞ͬͯΔ ‣ ϒϩάͰScalaͷDIؔ࿈ͷهࣄΛެ։ͯ͠Δ ‣ ࠷ۙsttpͱ͔࡞ͬͯΔ
Slide 23
Slide 23 text
MacWire wire͢Δ͚ͩͰɺ͋ͱϚΫϩ͕ͬͯ͘ΕΔ
Slide 24
Slide 24 text
MacWire wireSetͰෳΦϒδΣΫτͷSetԽ͕Մೳ
Slide 25
Slide 25 text
MacWire scala-commonͰλά͚͕Մೳ (λά͚ͨ͘͠ͳ͍߹Manual DIͱซ༻ͯ͠ྑ͍)
Slide 26
Slide 26 text
MacWire Pros Cons • ϘΠϥʔϓϨʔτ͕গͳ͍ • Compile-time DI • ϚΫϩ (ڧ͍ͯݴ͑)
Slide 27
Slide 27 text
Guice • Java༻DIϑϨʔϜϫʔΫ • ҆৺ͷGoogle • ߴػೳͰग़དྷΔࣄ͕ଟ͍ • Runtime DI
Slide 28
Slide 28 text
Guice ೖ͍ͤͨ͞ͱ͜Ζʹ @Inject Λ͚ͭΔ
Slide 29
Slide 29 text
Guice @ImplementedBy Ͱ࣮Λࢦఆ͢Δ or bind Ͱઢ͢Δ
Slide 30
Slide 30 text
Guice @Named, annotatedWithͰλά͚Մೳ
Slide 31
Slide 31 text
Guice @Named, annotatedWithͰλά͚Մೳ
Slide 32
Slide 32 text
Guice ProviderͰॊೈͳDI͕Մೳ
Slide 33
Slide 33 text
Guice Pros Cons • ߴػೳͰॊೈੑ͕ߴ͍ • ϘΠϥʔϓϨʔτ͕গͳ͍ • ࣮ߦ࣌ʹઢΛίϯτϩʔϧͰ͖Δ • JavaͰͬͯͨਓʹೃછΈ͍͢ • Runtime DI • ֶशίετ͕ߴ͍
Slide 34
Slide 34 text
ͳʹΛ͑ྑ͍͔ʁ
Slide 35
Slide 35 text
ԿΛ͑ྑ͍͔ʁ ͓͖ͳͷΛͲ͏ͧ
Slide 36
Slide 36 text
͓͢͢Ί • ࠷ॳManual DI͔Β࢝ΊΔͷ͕Φεεϝ • Compile-time DIΛͬͨ΄͏͕҆શ • Guiceڽͬͨࣄ͕͍ͨ͠߹ʹ