こんにちは
現在Hiltの導入のサンプルを作っているのですが、ついでにマルチモジュール化をやってみました。
ディレクトリ構成としては、アプリ名がhilt_sampleとすると
└── hilt_sample
├── data
│ └── repositories
│ └── MainRepositoryImpl.kt
├── domain
│ ├── repositories
│ │ └── MainRepository.kt
│ └── usecases
│ └── FetchSomeNumberUseCase.kt
└── presentation
├── MainActivity.kt
└── MainViewModel.kt
↑このようになっています。
Domain層にRepositoryのinterfaceを置いて、Usecaseから外側の層(Data層)に依存しないようにしている、よく見かける構成です。(Data層でそれを実装して、依存性を逆転させています)
Data層とPresentation層は、Domain層に依存しています。
まずはDomain層をモジュールとして切り出してみようと思います。
方針
- 空のモジュールを作る
- 1.で作ったモジュールにDomain層の中身を移行する
- モジュール化したDomain層をimportする
こんな感じで、空っぽのライブラリができます。
2. 1.で作ったモジュールにDomain層の中身を移行する
あとは、domainの中身をこっちにうつします。
原始的にAndroid Studio上でドラッグで引っ張ってディレクトリ移動するだけで特に不具合はなかったです。
3. モジュール化したDomain層をimportする
アプリケーションのbuild.gradleに、1.で作成したdomainというライブラリを追加します。
dependencies {
implementation project(":domain")
}
これでビルドをしたら、モジュールを分割できました。
ビルドが通らなかったらcleanとかしてみてください。
実用上どういう分割の仕方が妥当であるかはまだわからないので(DIが難しくなるとか聞いたことがあります)
詳しい方がいたら教えてください。
ではまた