MVP + Clean Architecture における DI 設計の一案

MVP + Clean Architecture っぽいプロジェクトで各レイヤーの依存関係を、 DI コンテナである dagger2 で表現する一案の備忘録。

結論

  • クラス数が多くなる。あまり現実的じゃない。
  • 結局 ViewLayer から見れば、注入オブジェクトたちを ApplicationComponent で管理してるのと変わらないのでは。

サンプルコード

sho5nn/android-tasting-mvp-dagger2

Activity で依存オブジェクトを確認できる。

UserView FriendListView FriendProfileView
f:id:sho5nn:20170910163030p:plain f:id:sho5nn:20170910163043p:plain f:id:sho5nn:20170910163054p:plain

依存図

各レイヤー間の依存方向を青い矢印で、依存性の注入方向を赤い矢印で表した図。

f:id:sho5nn:20170910162920p:plain

言わないこと

  • Clean Architecture + MVP の在り方
    • コードで表現したときの在り方やネーミング等は、適宜補完してもらえると。前述したサンプルコードにおいては、例えば Repository が抽象的ではない( Interface を定義していない)など。
    • 本来は DomainLayer に Repository Interface を定義し、 DataLayer で実装するのが望ましい気がする。