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
}
}