Middle
Rääkige mulle rohkem MVP (Model-View-Presenter) mustrist.
sobes.tech AI
Vastus AI-lt
MVP jagab rakenduse kolme vastastikku toimivat komponenti:
- Mudelis: Halda rakenduse andmeid, äriloogikat. See ei sõltu kasutajaliidesest.
- Vaade: Kuvab andmed kasutajale ja töötleb tema sisestusi. See on passiivne ega sisalda otsustusloogikat.
- Esitleja: Toimib vahendajana Modeli ja Vaate vahel. Saab andmeid Modelist ja vormindab need Vaadale. Reageerib Vaate sündmustele ja uuendab Modeli. Vaade viitab Esitlejale, ning Esitleja viitab Vaatele liidese kaudu.
MVP eelised:
- Stabiilsus UI muudatustes: Loogika asub Esitlejas, mis ei sõltu konkreetse Vaate rakendamisest.
- Testitavus: Esitlejat on lihtne isoleeritult testida, ilma UI-mockimiseta.
- Vastutuse jaotus: Komponentide selge jaotus parandab koodi hooldatavust.
Näide:
// Vaate liides
interface MainView {
fun showData(data: String)
fun showError(message: String)
}
// Esitleja
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("Andmete laadimine ebaõnnestus")
}
}
}
// Mudel
class MainModel {
fun getData(): String? {
// Andmete laadimine
return "Näidandmed"
}
}
// Tegevus (Vaate rakendamine)
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
}
}