MVP (Model-View-Presenter) Nedir?

Bugün yazılım mimarilerinden biri olan MVP (Model-View-Presenter) hakkında konuşacağız. Eğer mobil ya da masaüstü uygulamaları geliştiriyorsan, bu desen sana epey yardımcı olabilir. Hadi MVP’nin ne olduğunu, neden kullanıldığını ve nasıl çalıştığını adım adım inceleyelim!

MVP Nedir ve Neden Kullanılır?

MVP, Model-View-Presenter kelimelerinin baş harflerinden oluşan bir mimari desendir. Özellikle Android ve masaüstü uygulamalarında tercih edilir. Bu desen, MVC (Model-View-Controller) ile benzerlik gösterse de, View ve Presenter arasındaki ilişkiyi daha iyi yöneterek kodun daha okunaklı ve test edilebilir olmasını sağlar.

mvp architecture
Avanlex, CC BY-SA 4.0, via Wikimedia Commons

Gelin, MVP’nin temel bileşenlerine bakalım:

  • Model: Veri kaynağını temsil eder. Örneğin, bir veritabanından veri çekmek veya API çağrısı yapmak gibi işlemleri burada yaparız.
  • View: Kullanıcı arayüzüdür. Butonlar, listeler, formlar gibi görsel öğeler burada bulunur.
  • Presenter: View ve Model arasındaki köprü görevini görür. Veriyi View’a aktarır ve kullanıcının yaptığı işlemleri yönetir.

Bunu şu şekilde düşünebilirsin:

Model mutfaktaki aşçıdır, View restoranın önündeki masadır, Presenter ise garsondur!

Yani Presenter (garson), mutfaktan yemeği (Model) alır ve masaya (View) getirir. Müşteri bir sipariş verdiğinde de mutfağa iletiyor.

Bu yapı, bağımlılıkları azaltır, test edilebilirliği artırır ve kodu daha temiz hale getirir.

MVP’nin Çalışma Mantığı

MVP’de View, Presenter ile direkt olarak iletişim kurar, ancak Model ile etkileşime girmez. Presenter, View’dan aldığı bilgileri işler ve Model’e yönlendirir. Daha sonra Model’den aldığı sonucu View’a iletir.

Şimdi MVP’yi daha iyi anlaman için bir Java kod örneği üzerinden açıklayalım.

Java ile MVP Örneği

Senaryo: Kullanıcı bir isim girecek, butona tıkladığında bu ismi ekrana yazdıracağız.

📌 1. Model (Veriyi Yönetir)

// Model: Kullanıcı verisini tutan sınıf
public class User {
    private String name;

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

📌 2. View (Arayüzü Temsil Eder)

// View için bir arayüz oluşturuyoruz (Soyutlama sağlamak için)
public interface UserView {
    void showUserName(String name);
}

📌 3. Presenter (İletişimi Sağlar)

// Presenter, View ve Model arasında bağlantı kurar
public class UserPresenter {
    private UserView view;

    public UserPresenter(UserView view) {
        this.view = view;
    }

    public void onShowUserNameButtonClicked(String userName) {
        User user = new User(userName);
        view.showUserName(user.getName());
    }
}

📌 4. MainActivity (View’un gerçek implementasyonu)

public class MainActivity implements UserView {
    private UserPresenter presenter;

    public MainActivity() {
        presenter = new UserPresenter(this);
    }

    public void onButtonClick() {
        String userName = "Ahmet"; // Kullanıcıdan alınan veri (örnek)
        presenter.onShowUserNameButtonClicked(userName);
    }

    @Override
    public void showUserName(String name) {
        System.out.println("Kullanıcı Adı: " + name);
    }

    public static void main(String[] args) {
        MainActivity activity = new MainActivity();
        activity.onButtonClick();
    }
}

Çalıştırdığımızda konsolda şu çıktıyı alırız:

Kullanıcı Adı: Ahmet

Neden MVP Kullanmalıyız?

  • Daha iyi test edilebilirlik: View ve Model birbirinden bağımsız olduğu için Unit Test yazmak daha kolay olur.
  • Kod tekrarını azaltır: Presenter, View ve Model arasındaki işlemleri yönettiği için tek bir yerden yönetim sağlar.
  • Bakımı kolaylaştırır: Yeni bir özellik eklemek istediğinde sadece ilgili bileşeni değiştirmen yeterlidir.

MVC ile MVP Arasındaki Farklar

ÖzellikMVC (Model-View-Controller)MVP (Model-View-Presenter)
Kontrol AkışıController, Model ve View’a direkt erişebilirPresenter sadece View ile iletişim kurar
BağımlılıklarView, Model’e erişebilirView, Model’i doğrudan bilmez
Test EdilebilirlikController, genellikle UI bileşenlerine bağlıdırPresenter, UI bileşenlerinden tamamen ayrıdır

Sonuç

Eğer test edilebilir, okunabilir ve modüler bir kod yapısı istiyorsan, MVP harika bir seçimdir. Özellikle büyük ölçekli projelerde, View ve Model arasındaki bağımsızlığı artırdığı için, kodunun daha iyi organize olmasını sağlar.

MVP hakkında ne düşünüyorsun? Denemek ister misin? Yorumlarda fikirlerini paylaşabilirsin! 🚀

Paylaşmak ister misin?

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir