33

Do you know Dependency Injection ?

Embed Size (px)

Citation preview

� 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