Published on

Android 的 MVI 與 MVVM

Authors
  • avatar
    Name
    Alan Hu
    Twitter

對於 Android 來說,可將 MVI 視為基於 MVVM,對 View 跟 ViewModel 的一種改良。

MVVM

  • M: Model (Repository)
  • V: View (Activity, Fragment, View)
  • VM: ViewModel

特點:

  • 強調 View 跟 ViewModel 雙向綁定

MVI

  • M: Model (UiState)
    data class NewsUiState(
        val isSignedIn: Boolean = false,
        val isPremium: Boolean = false,
        val newsItems: List<NewsItemUiState> = listOf(),
        val userMessages: List<Message> = listOf()
    )
    
  • V: View (Activity, Fragment, View)
  • I: Intent
    // 此 Intent 表示 user 的操作意圖,非 Android 的 Intent 
    binding.button.setOnClickListener {
    	viewModel.xxx()
    }
    

特點:

  • 強調單向資料流 UDF
  • 強調 Immutable State