Sobes.tech
Junior — Middle

Fale-nos sobre a sua experiência na implementação do padrão arquitetónico Model-View-Intent (MVI).

sobes.tech IA

Resposta da IA

Model-View-Intent (MVI) — é um padrão arquitetónico que ajuda a gerir o estado da interface de utilizador através do fluxo de intenções (intents) do utilizador.

Na minha experiência de implementação de MVI no Android:

  • Intent — ações ou eventos do utilizador que são enviados para o sistema.
  • Model — lógica de negócio e estado que processam os intents e formam um novo estado.
  • View — exibe o estado e gera intents.

Por exemplo, ao pressionar um botão, a View envia um Intent, o Model processa-o e atualiza o Estado, que a View exibe.

Isto permite tornar a UI previsível e fácil de testar.

Exemplo de código simplificado:

sealed class Intent {
    object LoadData : Intent()
    data class Submit(val text: String) : Intent()
}

data class ViewState(val isLoading: Boolean, val data: String?)

class Model {
    private val state = MutableStateFlow(ViewState(false, null))

    fun process(intent: Intent) {
        when (intent) {
            is Intent.LoadData -> loadData()
            is Intent.Submit -> submitData(intent.text)
        }
    }

    private fun loadData() {
        state.value = ViewState(true, null)
        // carregamento de dados
        state.value = ViewState(false, "Dados carregados")
    }

    private fun submitData(text: String) {
        // processamento do envio
    }

    fun getState(): StateFlow<ViewState> = state
}