- コマンドを複数の関数として定義する方法:
最も基本的な方法は、Viewmodel内に複数の関数を定義し、それぞれの関数に対応するコマンドを作成することです。例えば、以下のようにコマンドを定義できます。
class MyViewModel : ViewModel() {
val command1 = MutableLiveData<Boolean>()
val command2 = MutableLiveData<Int>()
fun executeCommand1() {
// コマンド1の処理
command1.value = true
}
fun executeCommand2(data: Int) {
// コマンド2の処理
command2.value = data
}
}
上記の例では、command1
とcommand2
という2つのコマンドを定義し、それぞれのコマンドを実行するための関数を提供しています。コマンドの実行結果は、MutableLiveDataを介してUIに伝えられます。
- コマンドパターンを使用する方法:
コマンドパターンを使用すると、Viewmodel内に複数のコマンドを抽象化できます。このパターンでは、各コマンドをオブジェクトとして表現し、それぞれが共通のインターフェースを実装します。以下に例を示します。
interface Command {
fun execute()
}
class Command1 : Command {
override fun execute() {
// コマンド1の処理
}
}
class Command2(private val data: Int) : Command {
override fun execute() {
// コマンド2の処理
}
}
class MyViewModel : ViewModel() {
val command = MutableLiveData<Command>()
fun executeCommand(command: Command) {
this.command.value = command
}
}
上記の例では、Command
というインターフェースを定義し、Command1
およびCommand2
という2つの具象クラスを作成しています。Viewmodel内のcommand
変数は、Command
オブジェクトを保持します。executeCommand
関数を呼び出すことで、対応するコマンドが実行されます。
これらの方法を使用すると、Viewmodel内に複数のコマンドを効果的に管理できます。また、UIコントローラからViewmodelのコマンドを呼び出すことも容易になります。