Sobes.tech
Middle

Fale mais sobre o padrão MVP (Model-View-Presenter).

sobes.tech IA

Resposta da IA

O MVP divide a aplicação em três componentes interativos:

  • Modelo: Gerencia os dados da aplicação e a lógica de negócio. Não depende da interface de utilizador.
  • Vista: Mostra os dados ao utilizador e processa a sua entrada. É passiva e não contém lógica de decisão.
  • Presenter: Atua como intermediário entre o Modelo e a Vista. Recebe dados do Modelo e os formata para a Vista. Responde a eventos da Vista e atualiza o Modelo. A Vista refere-se ao Presenter, e o Presenter à Vista através de uma interface.

Vantagens do MVP:

  • Resistência a alterações na UI: A lógica está no Presenter, que não depende de uma implementação específica da Vista.
  • Testabilidade: O Presenter é fácil de testar isoladamente, sem necessidade de simular a UI.
  • Separação de responsabilidades: A clara divisão de papéis entre componentes melhora a manutenção do código.

Exemplo:

// Interface da Vista
interface MainView {
    fun showData(data: String)
    fun showError(message: String)
}

// Presenter
class MainPresenter(private val view: MainView, private val model: MainModel) {

    fun loadData() {
        val data = model.getData()
        if (data != null) {
            view.showData(data)
        } else {
            view.showError("Falha ao carregar os dados")
        }
    }
}

// Modelo
class MainModel {
    fun getData(): String? {
        // Carregamento de dados
        return "Dados de exemplo"
    }
}

// Atividade (Implementação da Vista)
class MainActivity : AppCompatActivity(), MainView {

    private lateinit var presenter: MainPresenter
    private lateinit var textView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        textView = findViewById(R.id.textView)

        val model = MainModel()
        presenter = MainPresenter(this, model)
        presenter.loadData()
    }

    override fun showData(data: String) {
        textView.text = data
    }

    override fun showError(message: String) {
        textView.text = message
    }
}