Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are the specific benefits of using DI on Android?

Tags:

What are the specific benefits or advantages of using a dependency injection framework for Android, like Dagger, Transfuse or RoboGuice?

For example, what kind of apps would benefit the most from using DI? is there more of a performance advantage, or is it more on the ease of extending an app, or even more about making it testable?

One of the reasons for asking this is to gauge if an app I'm developing would actually benefit from it or not much. Since I intend the app to be serious at some point, testability and ease of extension would be great, even if costly to use (more time to setup, learning curve, etc) for the first versions.

Thanks!

like image 230
Acapulco Avatar asked Feb 03 '14 07:02

Acapulco


People also ask

What is the use of DI Android?

Dependency injection (DI) is a technique widely used in programming and well suited to Android development. By following the principles of DI, you lay the groundwork for good app architecture. Implementing dependency injection provides you with the following advantages: Reusability of code.

What are the benefits of DI?

A basic benefit of dependency injection is decreased coupling between classes and their dependencies. By removing a client's knowledge of how its dependencies are implemented, programs become more reusable, testable and maintainable.

What is advantage of dependency injection in Android?

Reduces the boilerplate code. Makes our code reusable and clean. Makes it easy to replace our dependencies with fake implementations which make testing easier. Helps us enable loose coupling.

What is the main purpose of using dependency injection?

The goal of the dependency injection technique is to remove this dependency by separating the usage from the creation of the object. This reduces the amount of required boilerplate code and improves flexibility.


1 Answers

For example, what kind of apps would benefit the most from using DI?

Dependency injection (as a pattern not a library) benefits almost all code.

  • It promotes designing modular components which expose only the necessary APIs required to perform a specific action. When you are forced to break up pieces of your applications you have to consider how much implementation detail to expose, how the API behaves, and the visibility of classes and methods.
  • It promotes logical abstractions of components (think: interfaces and their implementations). You certainly don't have to do this, but it ends up occurring organically anyway the more you DI things.
  • It facilitates testability by creating a single point of type consumption through which a class obtains something it needs. Need to swap out a Foo for a TestFoo? No problem.

Is there more of a performance advantage?

No. The dependency injection libraries exist solely to reduce boilerplate around the pattern and increase the declarative ability to request dependencies.

Is it more on the ease of extending an app?

Absolutely. While I would never recommend using Guice (or RoboGuice) in an Android application, the introductory talk to Guice from Google I/O is a fantastic introduction to why dependency injection is important in this regard.

Even more about making it testable?

Yes and no. This is a happy side-effect of proper abstraction and modularization. Testing is a great thing so the fact that dependency injection offers an ease into it is also great.

I gave a talk about Dagger in the context of Android recently which you can watch* or view the slides. The talk starts out with dependency injection as a pattern and then moves into how Dagger reduces the boilerplate and enables some pretty cool features as well.

I also made a fairly advanced sample application which leverages Dagger for complex injection use-cases that might also be worth checking out.

*The talk is currently not free, but will become so at some point in the next 10 months.

like image 58
Jake Wharton Avatar answered Oct 20 '22 19:10

Jake Wharton