� Rekimoto Lab. at University of Tokyo(Samura Lab. at Akashi-NCT)
� Enginner at Wantedly, Inc.Mentor at Life is Tech, Inc.
RubyRuby on Rails
JavaScript
Android
Design
Others
Skill Ratio
DepdendencyInjection
依 存 性 注 入ディペンデンシー・インジェクション
依存性の注入とは、コンポーネント間の依存関係をプログラムのソースコードから排除し、
外部の設定ファイルなどで注入できるようにするソフトウェアパターンである。
依存性の注入 - 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 に差し替えるとテストが容易に!
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