Viewmodelに複数のコマンドを使用する方法


  1. コマンドを複数の関数として定義する方法:

最も基本的な方法は、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
    }
}

上記の例では、command1command2という2つのコマンドを定義し、それぞれのコマンドを実行するための関数を提供しています。コマンドの実行結果は、MutableLiveDataを介してUIに伝えられます。

  1. コマンドパターンを使用する方法:

コマンドパターンを使用すると、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のコマンドを呼び出すことも容易になります。