Sobes.tech
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
    }
}