Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
DIライブラリ Airframeを使ってみた
Search
takeosuzuki
April 25, 2019
Programming
1.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DIライブラリ Airframeを使ってみた
takeosuzuki
April 25, 2019
Other Decks in Programming
See All in Programming
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
180
AIエージェント時代のコードレビューを設計する
nogu66
6
2.6k
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
210
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
3
380
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
290
Oxlintはいいぞ(続)
yug1224
1
560
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
760
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
120
XHTMLが残したもの
yosuke_furukawa
PRO
2
460
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
アクセシビリティから考える情報設計
high_g_engineer
0
320
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
400
Designing Powerful Visuals for Engaging Learning
tmiket
1
530
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
450
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
Making Projects Easy
brettharned
120
6.7k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
Transcript
by TakeoSuzuki
自己紹介 Scala歴4ヶ月 3月からChatworkでアルバイト
@taroleoさんが開発していたライブラリ Scalaアプリケーション開発に便利 その中の一つがDIライブラリ
複数の実装があるとき
trait DataBase { def write(text: String): Unit } class RealDB()
extends DataBase { override def write(text: String): Unit = println(s"$text を本番用DBに書き込みました!") } class TestDB() extends DataBase { override def write(text: String): Unit = println(s"テスト環境のため $text は書き込みしてません!") } trait MyApp { val db = bind[DataBase] } val d = newDesign .bind[DataBase].to[RealDB] d.build[MyApp] { app => app.db.write("お試し") // お試し を本番用DBに書き込みました! // TestDB =>テスト環境のため お試し は書き込みしてません! }
RealDB、TestDBを変えるだけで 実装を切り替えることができる
同一のBindが複数ある時
trait MyApp { val firstName = bind[String] val lastName =
bind[String] } val d = newDesign .bind[String].toInstance("Takeo") .bind[String].toInstance("Suzuki") d.build[MyApp] { app => println(app.firstName) //Takeo println(app.lastName) //Suzuki } d.build[MyApp] { app => println(app.firstName) //Suzuki println(app.lastName) // Suzuki } 予想 結果
• 後が優先される • その型のフィールド全てに適用
MyAppに未定義のメソッドがある時
trait MyApp { val firstName = bind[String] val lastName =
bind[String] def f(x: Int): Int } class MyAppImpl extends MyApp { override def f(x: Int): Int = x + 1 } val d = newDesign .bind[String].toInstance("Takeo") .bind[MyApp].to[MyAppImpl] d.build[MyApp] { app => println(app.firstName) // Takeo println(app.lastName) // Takeo println(app.f(10)) //11 } これでいいのか・・・
val db: DataBase = new RealDB() val d = newDesign.bind[DataBase].to[RealDB]
None