Sobes.tech
Middle

Erzählen Sie mir mehr über das MVP-Muster (Model-View-Presenter).

sobes.tech KI

Antwort von AI

Das MVP teilt die Anwendung in drei interagierende Komponenten:

  • Model: Verwalten der Anwendungsdaten und Geschäftslogik. Es ist unabhängig von der Benutzeroberfläche.
  • View: Zeigt die Daten dem Benutzer an und verarbeitet seine Eingaben. Sie ist passiv und enthält keine Entscheidungslogik.
  • Presenter: Agiert als Vermittler zwischen Model und View. Es erhält Daten vom Model und formatiert sie für die View. Es reagiert auf Ereignisse der View und aktualisiert das Model. Die View bezieht sich auf den Presenter, und der Presenter auf die View über eine Schnittstelle.

Vorteile von MVP:

  • Widerstandsfähigkeit gegenüber UI-Änderungen: Die Logik befindet sich im Presenter, der nicht von einer bestimmten View-Implementierung abhängt.
  • Testbarkeit: Der Presenter ist leicht isoliert zu testen, ohne die UI zu mocken.
  • Aufgabentrennung: Klare Rollenverteilung zwischen Komponenten verbessert die Wartbarkeit des Codes.

Beispiel:

// View Schnittstelle
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("Fehler beim Laden der Daten")
        }
    }
}

// Model
class MainModel {
    fun getData(): String? {
        // Daten laden
        return "Beispieldaten"
    }
}

// Aktivität (View-Implementierung)
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
    }
}