Sobes.tech
Middle

MVP (Model-View-Presenter) deseneminden daha detaylı bahsedebilir misiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

MVP, uygulamayı üç etkileşimli bileşene ayırır:

  • Model: Uygulama verilerini ve iş mantığını yönetir. Kullanıcı arayüzüne bağlı değildir.
  • View: Verileri kullanıcıya gösterir ve girişlerini işler. Pasif olup karar verme mantığı içermez.
  • Presenter: Model ve View arasında aracı görevi görür. Model'den veri alır ve View için biçimlendirir. View olaylarına yanıt verir ve Model'i günceller. View, Presenter'a, Presenter ise View'a bir arayüz aracılığıyla referans verir.

MVP'nin avantajları:

  • UI değişikliklerine dayanıklılık: Mantık Presenter'da bulunur ve belirli bir View uygulamasına bağlı değildir.
  • Test edilebilirlik: Presenter, UI'yi taklit etmeden izole şekilde test edilebilir.
  • Sorumlulukların ayrılması: Bileşenler arasındaki net rol ayrımı, kodun bakımını kolaylaştırır.

Örnek:

// View Arayüzü
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("Veri yüklenemedi")
        }
    }
}

// Model
class MainModel {
    fun getData(): String? {
        // Veri yükleme
        return "Örnek Veri"
    }
}

// Aktivite (View Uygulaması)
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
    }
}