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が楽になります。
※大規模開発の場合、上記運用が辛いかもしれません…
コメント