[Android/Kotlin][TIL]MVVMモード解析



class SomeViewModel : ViewModel(){
	
    
    // state holder -> view 상태를 결정하고 , 이것만 봐도 view를 할 수 있음
    val _viewState: LiveData<ViewState>
    val _viewState2 : StateFlow<ViewState>
    
    // event -> 반드시 사용자에게 어떤 일이 일어났음을 알리는 용도
    //(api 성공, error , dialog)
    val _viewEvent : SingleLiveEvent<ViewEvent>
    val _viewEvent : Channel<ViewState> //
    
    
    //trigger
    fun submit():Unit{
    	try{
        	val responseModel = repository.api()
            val viewState = responseModel.toViewState()
            -viewState.value = viewState
          }catch( ... ){
          	_viewEvent.value = ViewEvent.Error(it)
          }
    }

}
ViewModelは、抽象的なビューでビューステータス(ViewState)を維持します.たとえば、ビューモデルは、読み書き可能な文字列属性によってテキスト入力器コントロールを抽象化します.データ・リストを表示するコントロールでは、各要素のビュー・ステータスを含むセットが使用されます.
API応答値を直接ビューに渡すよりも、一度にビューに渡すように加工します.
https://justhackem.wordpress.com/2017/03/05/mvvm-architectural-pattern/#comments
  • ViewState
    ViewStateは、画面が持つ本質的なデータです.
    ビューモデルでは、ビューからビューを入力するか、ビューに基づいてビューを描画します.
    たとえば、ログイン画面があるとします.この画面には、EditTextというパスワードのIDがあります.
    ここで、IDとパスワードはViewStateとなり、ユーザーが入力してビューモデルに埋め込まれます.
  • ValueConverter
    ValueConverterは本質的なデータを作成する操作です.
    再ログイン画面の例では、ViewStateログイン名とパスワードがあり、アクティブなログインボタンがある場合があります.
    この場合、ログインボタンがアクティブかどうかは、Value Converterに対応します.
    ViewStateのIDとして、パスワードは両方ともスペースではない組み合わせで、ブール値が1つあり、ビューに反映されている必要があります.
    したがって、コードを記述する際に、ViewStateでValueConverter形式を使用できるかどうかを考慮する必要があります.
    ViewStateが少ないほど可読性が高くモジュール化しやすいからです.
  • Command
    ビューは、ユーザに情報を表示する役割であり、ユーザからイベントを受信する役割でもある.
    したがって、ビューモデルはこれらのイベントを処理できる必要があります.それがCommand
    例としてログイン画面を再使用すると、ログイン動作はCommandになります.
    Commandは常にViewStateを使用してViewStateまたは出力信号を変更する役割です.
    したがって、ビューモデルが露出するビューの動作は、ビューを直接参照する必要はありません.
  • リファレンス
    https://velog.io/@bang/Android-MVVM-pattern-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0