Download - Toothpick & Dependency Injection

Transcript
Page 1: Toothpick & Dependency Injection

Dependency Injection & Toothpick

https://github.com/stephanenicolas/toothpick

Page 2: Toothpick & Dependency Injection

2/27

About us

Stéphane Nicolas Senior Android Dev at

Grouponstephanenicolas

snicolas+stephane nicolas

Daniel Molinero Android Dev at Groupon

dlemures

+DaniLemures

@D_Lemures

Page 3: Toothpick & Dependency Injection

• Introduction

• Dependency Injection

• Libraries

• Toothpick

• Toothpick Example

• Bonus: Advanced scenarios

3/27

Page 4: Toothpick & Dependency Injection

Dependencies? • Any object can be a dependency • A dependency of X is an object used by X to

accomplish its task

4/27

Introduction

Page 5: Toothpick & Dependency Injection

Dependencies? • Any object can be a dependency • A dependency of X is an object used by X to

accomplish its task

4/27

Introduction

Snow Cone

Granizado

Granité

Slushie

Granita

Page 6: Toothpick & Dependency Injection

Dependencies? • Snow Cone Machine. • Dependencies: Ice Machine + Syrup Dispenser

5/27

Introduction

Page 7: Toothpick & Dependency Injection

Snow Cone Machine • Dependencies: Ice Machine + Syrup Dispenser

6/27

Introduction

Page 8: Toothpick & Dependency Injection

7/27

Introduction

Disadvantages • The class is highly coupled to its dependencies • It depends on its dependencies implementation details • Breaks single responsibility principle • Non reusable code • Non testable code

Page 9: Toothpick & Dependency Injection

8/27

Dependency Injection

What is Dependency Injection (DI)? • Software design pattern • Implements inversion of control to resolve

dependencies • Dependencies are passed to the object, it does not

build or find them • Separates responsibilities of use and construction • An object is independent of its dependencies

implementation details

Page 10: Toothpick & Dependency Injection

Dependency Injection

Snow Cone Machine • Dependencies: Ice Machine + Syrup Dispenser

9/27

Page 11: Toothpick & Dependency Injection

Dependency Injection

Snow Cone Machine • Dependencies: Ice Machine + Syrup Dispenser

9/27

Page 12: Toothpick & Dependency Injection

Dependency Injection

Advantages • Decreases coupling between the object and its

dependencies • It is configurable. It does not need to know about a

concrete implementation • Reusable code • Testable code

10/27

Page 13: Toothpick & Dependency Injection

11/27

Libraries

But… • Is everything so easy and perfect? • What about something like:

Page 14: Toothpick & Dependency Injection

11/27

Libraries

But… • Is everything so easy and perfect? • What about something like:

Can someone do it for me??

Page 15: Toothpick & Dependency Injection

11/27

Libraries

But… • Is everything so easy and perfect? • What about something like:

Can someone do it for me??

YES

Page 16: Toothpick & Dependency Injection

12/27

Libraries

Dependency Injection Libraries • They create and inject dependencies for us • Just specify what are the dependencies and how to

build them • Two main libraries for Android:

• Roboguice • Dagger

Page 17: Toothpick & Dependency Injection

13/27

Libraries

Roboguice • Android oriented • It uses Guice, a Google DI library • Does most of work at runtime • Really simple and powerful solution

Page 18: Toothpick & Dependency Injection

13/27

Libraries

Roboguice • Android oriented • It uses Guice, a Google DI library • Does most of work at runtime • Really simple and powerful solution• Uses reflection heavily, being quite slow • Uses Guava, with thousand of methods,

contributing to reaching the dex limit and big APKs

Page 19: Toothpick & Dependency Injection

14/27

Libraries

Dagger • Java and Android oriented • Does most of work at compile time • Reflection replaced by annotation processing • Great performance

Page 20: Toothpick & Dependency Injection

14/27

Libraries

Dagger • Java and Android oriented • Does most of work at compile time • Reflection replaced by annotation processing • Great performance• Harder to use and require boiler plate code • Dependency Injection graph is completely static,

defined at compile time

Page 21: Toothpick & Dependency Injection

15/27

Libraries

High level overview

Ease of use

Speed

Roboguice

Dagger

Page 22: Toothpick & Dependency Injection

15/27

Libraries

High level overview

Ease of use

Speed

Roboguice

Dagger

Toothpick

Page 23: Toothpick & Dependency Injection

16/27

Toothpick

What is Toothpick? • Scope tree based Dependency Injection library • Full featured implementation of the JSR 330 • Runtime based, but does not use reflection. Replaced

by annotation processing • Almost as fast as Dagger, even faster in some cases • As simple as Roboguice, with few rules • Advanced testing support

Page 24: Toothpick & Dependency Injection

16/27

Toothpick

What is Toothpick? • Scope tree based Dependency Injection library • Full featured implementation of the JSR 330 • Runtime based, but does not use reflection. Replaced

by annotation processing • Almost as fast as Dagger, even faster in some cases • As simple as Roboguice, with few rules • Advanced testing support

Page 25: Toothpick & Dependency Injection

Toothpick

Snow Cone Machine • Dependencies: Ice Machine + Syrup Dispenser

17/27

Page 26: Toothpick & Dependency Injection

Toothpick

Snow Cone Machine • Dependencies: Ice Machine + Syrup Dispenser

17/27

Specify Dependencies

Page 27: Toothpick & Dependency Injection

Toothpick

Snow Cone Machine • Dependencies: Ice Machine + Syrup Dispenser

17/27

Specify Dependencies

Inject all dependencies

andtransitive

dependencies

Page 28: Toothpick & Dependency Injection

Toothpick

Snow Cone Machine • Dependencies: Ice Machine + Syrup Dispenser

18/27

Page 29: Toothpick & Dependency Injection

Toothpick

Snow Cone Machine • Dependencies: Ice Machine + Syrup Dispenser

18/27

TransitiveDependencies

Page 30: Toothpick & Dependency Injection

Toothpick

Snow Cone Machine • Dependencies: Ice Machine + Syrup Dispenser

18/27

AnnotatedConstructor

TransitiveDependencies

Page 31: Toothpick & Dependency Injection

19/27

Toothpick

Snow Cone Machine

Syrup Dispenser

Snow Cone Machine • Transitive dependencies

Ice Machine

Pump

Transitive Dependency

Page 32: Toothpick & Dependency Injection

19/27

Toothpick

Snow Cone Machine

Syrup Dispenser

Snow Cone Machine • Transitive dependencies

Ice Machine

Pump

Transitive Dependency

Page 33: Toothpick & Dependency Injection

20/27

Toothpick Example

Requirements • Different flavor Snow Cone Machines: Lemon and

Apple • Only one Ice Machine, it is shared • It should be an easy and fast solution:

Page 34: Toothpick & Dependency Injection

20/27

Toothpick Example

Requirements • Different flavor Snow Cone Machines: Lemon and

Apple • Only one Ice Machine, it is shared • It should be an easy and fast solution:

Toothpick to the rescue!!

Page 35: Toothpick & Dependency Injection

21/27

Toothpick Example

2 Snow Cone Machines: Lemon and Apple • Scopes are used to define overrides: bindings• Bindings are attached to the Scopes through modules

Page 36: Toothpick & Dependency Injection

21/27

Toothpick Example

2 Snow Cone Machines: Lemon and Apple • Scopes are used to define overrides: bindings• Bindings are attached to the Scopes through modules

Page 37: Toothpick & Dependency Injection

21/27

Toothpick Example

2 Snow Cone Machines: Lemon and Apple • Scopes are used to define overrides: bindings• Bindings are attached to the Scopes through modules

Page 38: Toothpick & Dependency Injection

22/27

Toothpick Example

2 Snow Cone Machines: Lemon and Apple

Page 39: Toothpick & Dependency Injection

23/27

Toothpick Example

Scope tree based

D -> E

X -> YA -> B

T -> Z

Page 40: Toothpick & Dependency Injection

24/27

Toothpick Example

Only one Ice Machine, it is shared • The Ice Machine is a Singleton • Use @Singleton annotation

Page 41: Toothpick & Dependency Injection

25/27

Bonus: Advanced scenarios

• MVP, keeping the presenter state • Nowadays -> Retained fragments, Loaders, … • Toothpick -> Use a scope to retain the instance of

the Presenter • User flow data

• Nowadays -> Send data over and over through Intents, Database, …

• Toothpick -> Use a common scope for the whole flow to keep flow related data

Page 42: Toothpick & Dependency Injection

26/27

Conclusion

• Toothpick is scope tree based DI framework • Advanced testing support• Nice scenarios: MVP, Flow Scope, … • Fast and simple

Page 43: Toothpick & Dependency Injection

26/27

Conclusion

• Toothpick is scope tree based DI framework • Advanced testing support• Nice scenarios: MVP, Flow Scope, … • Fast and simple How Fast?

Page 44: Toothpick & Dependency Injection

26/27

Conclusion

• Toothpick is scope tree based DI framework • Advanced testing support• Nice scenarios: MVP, Flow Scope, … • Fast and simple How Fast?

Page 45: Toothpick & Dependency Injection

27/27

Conclusion

1000 injections • Dagger 1: 33 ms

• Dagger 2: 31 ms

• Toothpick: 35 ms

6400 injections • Dagger 1: 45 ms

• Dagger 2: 42 ms

• Toothpick: 66 ms

Page 46: Toothpick & Dependency Injection

The Android Team is Hiringhttps://jobs.groupon.com/#/categories/engineering