Middle
MVP (Model-View-Presenter) үлгүсү жөнүндө көбүрөөк айтып бериңиз.
sobes.tech AI
AIден жооп
MVP бөлүштүрүү колдонмонун үч өз ара аракеттенүүчү компоненттерге бөлүнүшүн камсыздайт:
- Модель: Колдонмонун маалыматтарын, бизнес-логиканы башкарат. Ал колдонуучу интерфейси менен көз каранды эмес.
- Көрүнүш: Маалыматтарды колдонуучуга көрсөтөт жана анын киришин иштетет. Ал пассивдүү жана чечим кабыл алуу логикасын камтыбайт.
- Презентер: Модель менен көрүнүш ортосундагы ортомчу болуп саналат. Ал Моделден маалымат алат жана аны көрүнүш үчүн форматтайт. Көрүнүштүн окуяларына реакция кылат жана Моделди жаңыртат. Көрүнүш Презентерге шилтеме кылат, ал эми Презентер көрүнүшкө интерфейс аркылуу шилтеме кылат.
М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
}
}