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
}
}