Middle
Meséljen részletesebben az MVP (Model-View-Presenter) mintáról.
sobes.tech MI
Válasz az MI-től
Az MVP az alkalmazást három kölcsönhatásban lévő komponensre osztja:
- Model: Kezeli az alkalmazás adatait és az üzleti logikát. Nem függ a felhasználói felülettől.
- View: Megjeleníti az adatokat a felhasználónak és feldolgozza a bemenetét. Passzív, és nem tartalmaz döntéshozó logikát.
- Presenter: Közvetítőként működik a Model és a View között. Adatokat kap a Model-től, és formázza azokat a View számára. Reagál a View eseményeire, és frissíti a Modelt. A View a Presenter-re, a Presenter pedig a View-ra hivatkozik egy interfészen keresztül.
A MVP előnyei:
- UI változásokkal szembeni ellenállás: A logika a Presenter-ben található, amely nem függ egy adott View implementációjától.
- Tesztelhetőség: A Presenter könnyen tesztelhető izoláltan, anélkül, hogy a UI-t mock-olni kellene.
- Felelősségek szétválasztása: A komponensek közötti világos szereposztás javítja a kód karbantarthatóságát.
Példa:
// View interfész
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("Hiba az adatok betöltésekor")
}
}
}
// Model
class MainModel {
fun getData(): String? {
// Adatok betöltése
return "Példa adatok"
}
}
// Tevékenység (View implementáció)
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
}
}