Middle
Ispričaj više o obrascu MVP (Model-View-Presenter).
sobes.tech АИ
Одговор од АИ
MVP deli aplikaciju na tri međusobno delujuća komponenta:
- Model: Upravljanje podacima aplikacije i poslovnom logikom. Ne zavisi od korisničkog interfejsa.
- View: Prikazuje podatke korisniku i obrađuje njegov unos. Pasivna je i ne sadrži logiku donošenja odluka.
- Presenter: Deluje kao posrednik između Modela i View-a. Prima podatke od Modela i formatira ih za View. Reaguje na događaje View-a i ažurira Model. View se poziva na Presenter, a Presenter na View putem interfejsa.
Prednosti MVP:
- Otpornost na promene UI: Logika se nalazi u Presenter-u, koji nije zavistan od konkretne implementacije View-a.
- Testabilnost: Presenter je lako testirati u izolaciji, bez potrebe za simulacijom UI.
- Razdvajanje odgovornosti: Jasno razdvajanje uloga između komponenti poboljšava održavanje koda.
Primer:
// Interfejs View
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("Greška pri učitavanju podataka")
}
}
}
// Model
class MainModel {
fun getData(): String? {
// Učitavanje podataka
return "Primer podataka"
}
}
// Aktivnost (Implementacija View-a)
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
}
}