Sobes.tech
Middle

MVP (Model-View-Presenter) nümunəsi haqqında daha ətraflı danışın.

sobes.tech Süni İntellekt

AI-dan cavab

MVP tətbiqi üç qarşılıqlı əlaqəli komponentə bölür:

  • Model: Tətbiqin məlumatlarını və biznes məntiqini idarə edir. İstifadəçi interfeysindən asılı deyil.
  • View: Məlumatları istifadəçiyə göstərir və onun daxilolmalarını emal edir. Passivdir və qərar qəbul etmə məntiqini ehtiva etmir.
  • Presenter: Model və View arasında vasitəçi kimi çıxış edir. Modeldən məlumat alır və onu View üçün formatlayır. View hadisələrinə cavab verir və Modeli yeniləyir. View Presenter-ə, Presenter View-ə interfeys vasitəsilə müraciət edir.

MVP-nin üstünlükləri:

  • UI-də dəyişikliklərə davamlılıq: Mantiq Presenter-də yerləşir və müəyyən bir View tətbiqinə bağlı deyil.
  • Test ediləbilərlik: Presenter UI-ni mock etmədən izolyasiya şəraitində asanlıqla test edilə bilər.
  • Vəzifələrin bölünməsi: Komponentlər arasında aydın rol bölünməsi kodun saxlanmasını asanlaşdırır.

Nümunə:

// 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("Məlumatların yüklənməsində xəta")
        }
    }
}

// Model
class MainModel {
    fun getData(): String? {
        // Məlumatların yüklənməsi
        return "Nümunə məlumat"
    }
}

// Aktivlik (View-in tətbiqi)
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
    }
}