Middle
Povestiți mai multe despre pattern-ul MVP (Model-View-Presenter).
sobes.tech AI
Răspuns de la AI
MVP împarte aplicația în trei componente interacționale:
- Model: Gestionează datele aplicației și logica de afaceri. Nu depinde de interfața utilizatorului.
- View: Afișează datele utilizatorului și procesează intrarea acestuia. Este pasivă și nu conține logică decizională.
- Presenter: Acționează ca un intermediar între Model și View. Primește date de la Model și le formatează pentru View. Răspunde la evenimentele View și actualizează Modelul. View face referire la Presenter, iar Presenterul la View printr-o interfață.
Avantajele MVP:
- Rezistență la modificări UI: Logica se află în Presenter, care nu depinde de o implementare specifică a View-ului.
- Testabilitate: Presenterul este ușor de testat în izolare, fără a fi nevoie să se simuleze UI-ul.
- Separarea responsabilităților: O diviziune clară a rolurilor între componente îmbunătățește întreținerea codului.
Exemplu:
// Interfața 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("Eșec la încărcarea datelor")
}
}
}
// Model
class MainModel {
fun getData(): String? {
// Încărcare date
return "Date de exemplu"
}
}
// Activitate (Implementarea 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
}
}