Android DI(Dependency Injection) memo
Simplenoteに転がってたメモを記事にして整理しておく。
DIとは
あるmodule Aで別のmodule Bをnewすると、module Bが変更された場合その影響を受ける。依存性をアプリケーションクラスから取り除いてプラグイン実装へと移す。依存オブジェクトを(外部から)注入することをDependency Injectionと言う。 DIの実装方法には以下の様なパターンが存在する。
コンストラクタインジェクション
public class Car { public Car(Engine engine, Wheel wheel) { mEngine = engine; mWheel = wheel; } ... }
セッターインジェクション
public class Car { public void setEngine(Engine engine) { mEngine = engine; } public void setWheel(Wheel wheel) { mWheel = wheel; } }
フィールドインジェクション
public class Car { @Inject /* package */ Engine mEngine; /* package */ Wheel mWheel; }
インタフェースインジェクション
public interface injectEngine { public void injectEngine(Engine engine); } public interface injectWheel { public void injectWheel(Wheel wheel); } public class Car implements injectEngine, injectWheel { private Engine mEngine; private Wheel mWheel; public void injectEngine(Engine engine) { this.mEngine = engine; } public void injectWheel(Wheel wheel) { this.mWheel = wheel; } }