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!
İçerik
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.
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
Özellik | MVC (Model-View-Controller) | MVP (Model-View-Presenter) |
---|---|---|
Kontrol Akışı | Controller, Model ve View’a direkt erişebilir | Presenter sadece View ile iletişim kurar |
Bağımlılıklar | View, Model’e erişebilir | View, Model’i doğrudan bilmez |
Test Edilebilirlik | Controller, genellikle UI bileşenlerine bağlıdır | Presenter, 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! 🚀