Middle
Cuéntame más sobre el patrón MVP (Model-View-Presenter).
sobes.tech AI
Respuesta de la IA
MVP divide la aplicación en tres componentes interactivos:
- Modelo: Gestiona los datos de la aplicación y la lógica de negocio. No depende de la interfaz de usuario.
- Vista: Muestra los datos al usuario y procesa su entrada. Es pasiva y no contiene lógica de decisión.
- Presentador: Actúa como intermediario entre Modelo y Vista. Recibe datos del Modelo y los formatea para la Vista. Responde a eventos de la Vista y actualiza el Modelo. La Vista se refiere al Presentador, y el Presentador a la Vista a través de una interfaz.
Ventajas de MVP:
- Resistencia a cambios en la UI: La lógica está en el Presentador, que no depende de una implementación específica de la Vista.
- Testabilidad: El Presentador es fácil de probar en aislamiento, sin necesidad de simular la UI.
- Separación de responsabilidades: La clara división de roles entre componentes mejora la mantenibilidad del código.
Ejemplo:
// Interfaz de Vista
interface MainView {
fun showData(data: String)
fun showError(message: String)
}
// Presentador
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("Error al cargar los datos")
}
}
}
// Modelo
class MainModel {
fun getData(): String? {
// Carga de datos
return "Datos de ejemplo"
}
}
// Actividad (Implementación de la 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
}
}