Middle
Ավելացրեք ավելի մանրամասն տեղեկություններ MVP (Model-View-Presenter) ձևաչափի մասին։
sobes.tech AI
Պատասխան AI-ից
MVP բաժանում է հավելվածը երեք փոխազդեցող բաղադրիչների՝
- Մոդել: Կառավարում է հավելվածի տվյալները, բիզնես-լոգիկան: Այն կախված չէ օգտագործողի ինտերֆեյսից:
- Դիտում: Ցուցադրում է տվյալները օգտվողին և մշակել նրա մուտքերը: Այն պասիվ է և չի պարունակում որոշումների ընդունման տրամաբանություն:
- Ներկայացուցիչ: Կապող օղակ է Մոդելի և Դիտման միջև: Ստանում է տվյալները Մոդելից և ձևաչափում է դրանք Դիտման համար: Գործում է Դիտման իրադարձությունների վրա և թարմացնում է Մոդելին: Դիտումը հղում է Ներկայացուցիչին, իսկ Ներկայացուցիչը հղում է Դիտմանը ինտերֆեյսի միջոցով:
Առավելություններ՝ MVP:
- 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 "Նմուշային տվյալներ"
}
}
// Գործողություն (Դիտման իրագործում)
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
}
}