Middle
Vertel meer over het MVP-patroon (Model-View-Presenter).
sobes.tech AI
Antwoord van AI
De MVP verdeelt de applicatie in drie onderling verbonden componenten:
- Model: Beheert de gegevens van de applicatie en de bedrijfslogica. Het is onafhankelijk van de gebruikersinterface.
- View: Toont de gegevens aan de gebruiker en verwerkt zijn invoer. Het is passief en bevat geen beslissingslogica.
- Presenter: Functioneert als tussenpersoon tussen Model en View. Ontvangt gegevens van het Model en formatteert ze voor de View. Reageert op gebeurtenissen van de View en werkt het Model bij. De View verwijst naar de Presenter, en de Presenter naar de View via een interface.
Voordelen van MVP:
- Weerstand tegen UI-wijzigingen: De logica bevindt zich in de Presenter, die niet afhankelijk is van een specifieke implementatie van de View.
- Testbaarheid: De Presenter is gemakkelijk te testen in isolatie, zonder de UI te hoeven mocken.
- Verdeling van verantwoordelijkheden: Duidelijke rolverdeling tussen componenten verbetert de onderhoudbaarheid van de code.
Voorbeeld:
// View Interface
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("Fout bij het laden van gegevens")
}
}
}
// Model
class MainModel {
fun getData(): String? {
// Gegevens laden
return "Voorbeeldgegevens"
}
}
// Activiteit (View-implementatie)
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
}
}