Android + DIの個人的最適解?

AndroidでDaggerを用いたDIを取り入れていますが、ここ最近自分の中での最適解を見つけたので紹介します。

*初心者なので、コメントなどお待ちしております。

アーキテクチャ概要

MVVM + DDD(ドメイン駆動開発)を我流アレンジしています。

プロジェクト概要はこんな感じ。

./app
  ├── activity
  │     └── MainActivity.kt
  ├── model
  │     └── HogeModel.kt
  ├── fragment
  │     └── HogeFragment.kt
  ├── service
  │     ├── IUserService.kt
  │     └── UserService.kt
  ├── repository
  │     ├── BaseRepository.kt (基底クラス) ←ポイント
  │     └── UserRepository.kt
  └── viewmodel
  │     └── HogeViewModel.kt
  ├── AppComponent.kt
  └── AppCModule.kt

AppComponent・AppModuleの中身

AppComponent

@Singleton
@Component(modules = [AppModule::class])
interface AppComponent {
    fun inject(repository: BaseRepository)
}

AppModule

@Module
class AppModule {
    @Singleton
    @Provides
    internal fun providesLoginService(): IUserService {
        return UserService()
    }
}

基底クラスであるBaseRepositoryに対し、依存性を注入しています。(継承した子クラスごとに記述したくないと考えたため)

これにより、Base repositoryを継承しておけば、DIが楽になります。

※大規模開発の場合、上記運用が辛いかもしれません…

コメント

タイトルとURLをコピーしました