Middle
Papasakokite išsamiau apie MVP (Model-View-Presenter) modelį.
sobes.tech AI
Atsakymas iš AI
MVP padalina taikymą į tris sąveikaujančius komponentus:
- Modelis: Valdo programos duomenis, verslo logiką. Jis nepriklauso nuo naudotojo sąsajos.
- Vaizdas: Rodo duomenis naudotojui ir apdoroja jo įvestį. Jis yra pasyvus ir neturi sprendimų priėmimo logikos.
- Pristatymas: Veikia kaip tarpininkas tarp Modelio ir Vaizdo. Jis gauna duomenis iš Modelio ir formatuoja juos Vaizdui. Reaguoja į Vaizdo įvykius ir atnaujina Modelį. Vaizdas nurodo Pristatymą, o Pristatymas nurodo Vaizdą per sąsają.
MVP privalumai:
- Stabilumas UI pokyčiuose: Logika yra Pristatymo dalyje, kuris nepriklauso nuo konkretaus Vaizdo.
- Testavimas: Pristatymą lengva testuoti izoliuotai, be UI mockavimo.
- Atsakomybės pasidalijimas: Aiškus komponentų pasidalijimas gerina kodo priežiūrą.
Pavyzdys:
// Vaizdo sąsaja
interface MainView {
fun showData(data: String)
fun showError(message: String)
}
// Pristatymas
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("Nepavyko įkelti duomenų")
}
}
}
// Modelis
class MainModel {
fun getData(): String? {
// Duomenų įkėlimas
return "Pavyzdiniai duomenys"
}
}
// Veikla (Vaizdo įgyvendinimas)
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
}
}