Middle
Бештар дар бораи намунаи MVP (Model-View-Presenter) нақл кунед.
sobes.tech AI
Ҷавоб аз AI
МVP бөлүп, тиркемени үч өз ара аракеттенүүчү компонентке бөлөт:
- Модель: Тиркеменин маалыматтарын, бизнес-логиканы башкарат. Ал колдонуучу интерфейсине көз каранды эмес.
- Көрүнүш: Колдонуучуга маалыматтарды көрсөтөт жана анын киришин иштетет. Ал пассивдүү жана чечим кабыл алуу логикасын камтыбайт.
- Презентер: Модель менен көрүнүш ортосундагы ортомчу болуп саналат. Ал Моделден маалымат алат жана аны көрүнүш үчүн форматтайт. Көрүнүштүн окуяларына реакция кылат жана Моделди жаңыртат. Көрүнүш Презентерге шилтеме кылат, ал эми Презентер көрүнүшкө интерфейс аркылуу шилтеме кылат.
МVPнин артыкчылыктары:
- UI өзгөрүүлөрүнө туруктуулук: Логика Презентерде жайгашкан, ал конкреттүү көрүнүш ишке ашырылышына көз каранды эмес.
- Тестирлөө мүмкүнчүлүгү: Презентерди изоляцияда оңой тестирлөө мүмкүн, UI-ны моктоо зарылчылыгы жок.
- Жоопкерчиликти бөлүштүрүү: Компоненттер ортосунда так бөлүнүшү коддун оңой колдоосун жакшыртат.
Мисал:
// Көрүнүш интерфейси
interface MainView {
fun showData(data: String)
fun showError(message: String)
}
// Презентер
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("Маалыматты жүктөөдө ката болду")
}
}
}
// Модель
class MainModel {
fun getData(): String? {
// Маалыматты жүктөө
return "Нускама маалымат"
}
}
// Activity (Көрүнүш ишке ашыруу)
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
}
}