Sobes.tech
Middle

MVP (Model-View-Presenter) naqshining tafsilotlarini aytib bering.

sobes.tech AI

AIdan javob

MVP dasturiy ta'minotni uchta o'zaro ta'sir qiluvchi komponentga bo'linadi:

  • Model: Dastur ma'lumotlarini va biznes mantiqini boshqaradi. U foydalanuvchi interfayzidan mustaqil.
  • View: Ma'lumotlarni foydalanuvchiga ko'rsatadi va uning kirishlarini ishlov beradi. U passiv va qaror qabul qilish mantiqini o'z ichiga olmaydi.
  • Presenter: Model va View o'rtasida vositachi bo'lib xizmat qiladi. U Modeldan ma'lumot oladi va uni View uchun formatlaydi. View voqealariga javob beradi va Modelni yangilaydi. View Presenterga, Presenter Viewga interfeys orqali murojaat qiladi.

MVP ning afzalliklari:

  • UI o'zgarishlariga chidamlilik: Mantiq Presenterda joylashgan bo'lib, u aniq bir View implementatsiyasiga bog'liq emas.
  • Test qilish imkoniyati: Presenter UI ni mock qilmasdan izolyatsiyada test qilish oson.
  • Mas'uliyatlarni ajratish: Komponentlar orasidagi aniq rol bo'linishi kodni saqlashni osonlashtiradi.

Misol:

// View interfeysi
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("Ma'lumotlarni yuklashda xato")
        }
    }
}

// Model
class MainModel {
    fun getData(): String? {
        // Ma'lumotlarni yuklash
        return "Misol ma'lumotlari"
    }
}

// Faoliyat (View implementatsiyasi)
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
    }
}