Middle
Povedzte viac o vzoreci MVP (Model-View-Presenter).
sobes.tech AI
Odpoveď od AI
MVP rozdeľuje aplikáciu na tri vzájomne pôsobiace komponenty:
- Model: Riadi údaje aplikácie a obchodnú logiku. Nezávisí od používateľského rozhrania.
- View: Zobrazuje údaje používateľovi a spracováva jeho vstup. Je pasívna a neobsahuje rozhodovaciu logiku.
- Presenter: Pôsobí ako sprostredkovateľ medzi Modelom a View. Získa údaje od Modelu a ich formátuje pre View. Reaguje na udalosti View a aktualizuje Model. View odkazuje na Presenter a Presenter na View cez rozhranie.
Výhody MVP:
- Odolnosť voči zmenám UI: Logika je v Presenter, ktorý nie je závislý od konkrétnej implementácie View.
- Testovateľnosť: Presenter je ľahko testovateľný v izolácii, bez potreby mockovania UI.
- Rozdelenie zodpovedností: Jasné rozdelenie rolí medzi komponentami zlepšuje udržiavateľnosť kódu.
Príklad:
// Rozhranie 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("Chyba pri načítaní dát")
}
}
}
// Model
class MainModel {
fun getData(): String? {
// Načítanie dát
return "Ukážkové dáta"
}
}
// Aktivita (Implementácia View)
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
}
}