Sobes.tech
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
    }
}