UseCaseがたくさん出来すぎる問題の解決方法

3472 ワード

Androidのアプリを作っていて、機能が増えてくるとUseCaseが増えすぎる問題があるよな。。。
と感じたので、解決手段を調査しました。

結論:UseCaseは機能毎にまとめる

UseCaseは機能毎にまとめてViewModelに提供すればいいと思います。

例えば、とあるカウンターアプリの機能に、カウントアップ、カウントダウン、カウントリセットがあるとします。

それぞれの機能をUseCaseで作ってViewModelに提供すると、UseCase多すぎるという問題が起こるのは容易に想像つきます。

そこで、作ったUseCaseをそれぞれ別でDIするのではなく機能毎に1つのUseCaseにまとめてしまいます。

今回だと、カウンターを制御するUseCaseが3つあるので、カウンターの制御に関するUseCaseを1つにまとめたクラスを作成してViewModelに提供すればよさそうです。

実装例を記載します。
なお、紙面の関係でinterfaceは記載していませんが、ご了承ください。

/**
 * カウントアップ
 */
class CountUpUseCase() {
	operator fun invoke(count : Int) { return count + 1 }
}

/**
 * カウントダウン
 */
class CountDownUseCase() {
	operator fun invoke(count : Int) { return count - 1 }
}

/**
 * カウントリセット
 */
class CountResetUseCase() {
	operator fun invoke(count : Int) { return 0 }
}

/**
 * カウンターの更新を制御するUseCase群
 */
data class CounterUseCases (
	val up = CountUpUseCase
	val down = CountDownUseCase
	val reset = CountResetUseCase
)