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
Do you know Dependency Injection?
Search
Masayuki Izumi
May 02, 2015
Technology
0
98
Do you know Dependency Injection?
Code for KOSEN勉強会 #3 発表資料
Masayuki Izumi
May 02, 2015
Tweet
Share
More Decks by Masayuki Izumi
See All by Masayuki Izumi
Next.js App Router を例に考える、技術選定・技術との距離感 #技術選定_findy / findy 2024-01-24
izumin5210
11
4.9k
雑なコード生成のすすめ #nihonbashijs 8 / zatsu-code-generation
izumin5210
0
42
React Server Components で複雑さに立ち向かう #コンポーネント_findy / findy 2023-10-04
izumin5210
10
2.6k
みんなで育てる GraphQL スキーマ, それを支える Protobuf / GraphQL and Protobuf #tech_stand
izumin5210
7
3.3k
GraphQL 導入の反省と再挑戦 / jsconf jp 2021
izumin5210
11
7.8k
HTTP クライアントを作ろうとして学ぶ、使いやすいインタフェース / #GoCon_Sendai 2020
izumin5210
7
4.9k
個人の・組織の Go 筋を強化する / Gophers Code Reading Party
izumin5210
1
300
今あらためて読み直したい Go 基礎知識 その2 / golang.tokyo #25
izumin5210
10
8.9k
CLI ツール開発を支える技術 2019春 / Techniques that support building CLI tools, 2019 Spring
izumin5210
8
3.4k
Other Decks in Technology
See All in Technology
統計的学習理論読み Chapter 1
kmatsui
3
760
SREsのためのSRE定着ガイド
netmarkjp
10
1.6k
実務への応用例から考える 変更に強いオブジェクト指向設計 / 20240324-ooc2024
bengo4com
7
5.2k
Evolutionary Optimization of Model Merging Recipes
fuyu_quant0
3
520
データマネジメントを支える武器としてのメタデータ管理
10xinc
1
340
データ化エンジニアとしての1年を振り返る
sansantech
PRO
3
250
Getting started with controlling LEGO using Swift
hcrane
0
130
検証からプロダクトへ: シームレスなLLM開発の ためのしくみ作り
nunukim
1
160
Vos logs méritent mieux que la config par défaut
lyrixx
2
270
MongoDB Atlas Vectorsearchではじめる生成AIアプリ開発
chie8842
3
510
大規模データとの戦い方
knih
1
460
暗黙知を集積するプラットフォーム : 「健常者エミュレータ事例集」の取り組み
sora32127
1
160
Featured
See All Featured
How GitHub (no longer) Works
holman
301
140k
Building a Modern Day E-commerce SEO Strategy
aleyda
15
6.3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
272
12k
Fontdeck: Realign not Redesign
paulrobertlloyd
75
4.8k
The Invisible Customer
myddelton
114
12k
Become a Pro
speakerdeck
PRO
8
4.4k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
111
35k
Adopting Sorbet at Scale
ufuk
66
8.5k
Large-scale JavaScript Application Architecture
addyosmani
501
110k
Clear Off the Table
cherdarchuk
82
310k
4 Signs Your Business is Dying
shpigford
174
21k
Why Our Code Smells
bkeepers
PRO
330
56k
Transcript
None
Ƅ Rekimoto Lab. at University of Tokyo (Samura Lab. at
Akashi-NCT) Enginner at Wantedly, Inc. Mentor at Life is Tech, Inc.
None
None
Ruby Ruby on Rails JavaScript Android Design Others Skill Ratio
Depdendency Injection
依 存 性 注 入 ディペンデンシー・インジェクション
依存性の注入とは、コンポーネント間の依存関係を プログラムのソースコードから排除し、 外部の設定ファイルなどで注入できるようにする ソフトウェアパターンである。 依存性の注入 - Wikipedia
共通 component ふつうのばあい
共通 component ふつうのばあい 直接参照している (global 変数,new など)
共通 component ふつうのばあい component の機能が少ない… 拡張しよう!
共通 component ふつうのばあい _人人人人人人人人_ > 突然の密結合 <  ̄Y^Y^Y^Y^Y^Y^Y ̄
共通 component DI する場合 インタフェースを参照する
共通 component DI する場合 どの実態を利用するか DI コンテナに記述
共通 component DI のメリット ここは単体テストで OK
共通 component の モック DI のメリット mock に差し替えると テストが容易に!
None
None
Android DI をつかおう JavaScript
Android DI をつかおう Dagger2
Android における DI Sign in 遷移 tweet 取得
Android における DI Sign in 遷移 tweet 取得 インスタンス変数に保持してると… ライフサイクルに巻き込まれて死ぬ
Android における DI Sign in 遷移 tweet 取得 DI コンテナ
Android における DI Sign in 遷移 tweet 取得 DI コンテナ
DI コンテナが User を保持するので ライフサイクルに巻き込まれない!
DI をつかおう JavaScript Browserify
JavaScript における DI グローバルオブジェクト(window/global)
JavaScript における DI グローバルオブジェクト(window/global) _人人人人人人人人人_ > グローバル汚染 <  ̄Y^Y^Y^Y^Y^Y^Y^Y ̄
JavaScript における DI グローバルオブジェクト(window/global)
JavaScript における DI グローバルオブジェクト(window/global) DI コンテナに押し込めて グローバル汚染を防止
まとめ DIでグローバル汚染の防止 DIでテスタビリティ向上 DIでモジュールの疎結合化 Android では… Dagger / Dagger2 JavaScript
では… Browserify / ECMAScript 6
None
None
None