1. Model-View-Controller (MVC)
MVC (Model-View-Controller), uygulamanın verilerini, kullanıcı arayüzünü ve kontrol mantığını üç bileşene ayıran en erken ve en yaygın benimsenen tasarım desenlerinden biridir.
Model:
- Uygulamanın iş mantığını ve verilerini temsil eder.
- Veritabanı işlemleri, iş kuralları ve verilerin doğrulanması gibi işlevleri içerir.
- Kullanıcı arayüzünden bağımsız çalışır.
View:
- Kullanıcıya gösterilen bileşendir.
- Verilerin görselleştirilmesinden sorumludur.
- Kullanıcıdan gelen girdileri kabul eder ancak bu girdileri işlemez.
Controller:
- Kullanıcıdan gelen girdileri işler.
- Model ve View arasında köprü görevi görür.
- Model’deki verileri günceller ve bu güncellemeleri View’a yansıtır.
Kullanım Alanları:
- Web Uygulamaları: MVC, web uygulamalarında yaygın olarak kullanılır. Örneğin, Ruby on Rails, Spring, Django, Node.js ve Express, ASP.Net MVC gibi frameworkler çoğunlukla MVC mimarisini temel alır.
- Örnek: Bir e-ticaret uygulamasında, kullanıcı bir ürün satın almak için ödeme bilgilerini girdiğinde, Controller bu ödeme bilgilerini alır, doğruluğunu kontrol eder ve Model’e ileterek ödeme işlemini gerçekleştirir. Model, ödeme işlemini tamamladığında, Controller bu bilgiyi View’a iletir ve View, kullanıcıya ödemenin başarıyla tamamlandığını gösterir.
2. Model-View-Presenter (MVP)
MVP (Model-View-Presenter), MVC’den evrilmiş bir desendir ve etkinlik tabanlı ortamlarda View bileşenini Model’den ayırarak eksiklikleri gidermeyi amaçlar.
Model:
- Verileri ve iş mantığını yönetir.
- Verilerin güncellenmesi, doğrulanması ve saklanmasından sorumludur.
View:
- Kullanıcıya bilgiyi gösterir ve kullanıcı etkileşimlerini Presenter’a iletir.
- Pasif bir bileşendir ve sadece Presenter’dan aldığı bilgileri gösterir.
Presenter:
- View’dan gelen girdileri işler ve gerekli verileri Model’den alarak View’a sunar.
- View ve Model arasında çift yönlü bir iletişim sağlar.
- Uygulamanın iş mantığını içerir.
Kullanım Alanları:
- Mobil Uygulamalar: Android geliştirmede yaygın olarak kullanılır. Örneğin, Android için geliştirilen bir uygulamada, Presenter kullanıcı tıklamalarını işler, gerekli verileri Model’den alır ve View’a iletir.
- Örnek: Bir hesap makinesi uygulamasında, kullanıcı bir işlem yaptığında, View bu girdileri Presenter’a iletir. Presenter, verileri doğrular ve Model’e ileterek işlemi gerçekleştirir. Model, işlemi tamamladığında, sonucu Presenter’a döner. Presenter bu sonucu View’a iletir ve View, kullanıcıya hesaplanan sonucu gösterir.
3. Model-View-Intent (MVI)
MVI (Model-View-Intent), reaktif bir mimaridir ve tek yönlü veri akışını benimseyerek, UI’nin durum ne olursa olsun tutarlı kalmasını sağlar.
Model:
- Uygulamanın durumunu temsil eder.
- Tüm iş mantığını ve veri işleme işlevlerini içerir.
View:
- Durumu kullanıcıya yansıtır ve kullanıcı eylemlerini Intent’a iletir.
- Durum değişikliklerini kullanıcıya gösterir.
Intent:
- Kullanıcı eylemlerini temsil eder ve Model’deki durumu değiştirir.
- Kullanıcı etkileşimlerini Model’e ileterek durumu günceller.
Kullanım Alanları:
- Reaktif Uygulamalar: Özellikle RxJava gibi reaktif programlama ile uyumlu uygulamalarda kullanılır. Kullanıcı arayüzünde durum yönetimi ve veri akışını kontrol etmek için idealdir. Redux, React ile birlikte yaygın olarak kullanılan bir state management kütüphanesi olarak, MVI benzeri bir yapı sağlar.
- Örnek: Spotify benzeri bir uygulamada, kullanıcı bir şarkıyı çalmak için düğmeye bastığında, View bu kullanıcı eylemini Intent’a iletir. Intent, bu eylemi Model’e ileterek şarkının çalınmasını sağlar. Model, şarkıyı çalmaya başladığında, güncellenmiş durumu Intent’a döner. Intent bu durumu View’a iletir ve View, kullanıcıya şarkının çalındığını gösterir.
4. Model-View-ViewModel (MVVM)
MVVM (Model-View-ViewModel), UI geliştirme karmaşıklıklarını ele alır ve ViewModel’in UI bileşenlerini bilmeden görünüm mantığını ele almasını teşvik eder.
Model:
- Verileri ve iş mantığını yönetir.
- Uygulamanın iş kurallarını ve verilerini içerir.
View:
- Kullanıcıya bilgiyi gösterir ve kullanıcı etkileşimlerini ViewModel’e iletir.
- UI bileşenlerini temsil eder.
ViewModel:
- UI ile ilgili verileri tutar ve içerir.
- View ve Model arasında köprü görevi görür.
- Veri bağlama (data binding) kullanarak View’a veri sağlar ve View’dan veri alır.
Kullanım Alanları:
- UI Uygulamaları: WPF (Windows Presentation Foundation) ve Android’de LiveData ile kullanılır. UI bileşenlerinin veri bağlama yetenekleri sayesinde, kullanıcı arayüzü ile veri yönetimi arasındaki bağı azaltır. Android Jetpack kütüphaneleri, LiveData ve ViewModel sınıfları ile MVVM mimarisini destekler. Vue.js ile birlikte MVVM mimarisi uygulanabilir ve Vuex ile state management sağlanabilir.
- Örnek: Bir hava durumu uygulamasında, kullanıcı yeni bir şehir seçtiğinde, View bu şehir bilgilerini ViewModel’e iletir. ViewModel, bu bilgileri doğrular ve Model’e ileterek hava durumu verilerini alır. Model, verileri sağladıktan sonra, ViewModel’e sonucu döner. ViewModel bu verileri View’a veri bağlama yöntemiyle iletir ve View, kullanıcıya seçilen şehrin güncel hava durumu bilgilerini gösterir.
5. Model-View-ViewModel-Coordinator (MVVM-C)
MVVM-C (Model-View-ViewModel-Coordinator), MVVM’in üzerine inşa edilmiştir ve Coordinator’ı tanıtarak navigasyonu ele alır, View ve ViewModel’den ayırır.
Model:
- Verileri ve iş mantığını yönetir.
View:
- Kullanıcıya bilgiyi gösterir ve kullanıcı etkileşimlerini ViewModel’e iletir.
ViewModel:
- UI ile ilgili verileri tutar ve içerir.
- Veri bağlama kullanarak View’a veri sağlar ve View’dan veri alır.
Coordinator:
- Navigasyon mantığını içerir.
- View ve ViewModel’in navigasyonla ilgilenmesini engeller.
Kullanım Alanları:
- Karmaşık Navigasyonlu Uygulamalar: Özellikle iOS uygulamalarında kullanılır. Karmaşık navigasyon mantığının View ve ViewModel’den ayrılmasını sağlar. React uygulamalarında, React Router kullanarak koordinatör benzeri bir yapı oluşturulabilir.
- Örnek: Bir sosyal medya uygulamasında, kullanıcı profilinden ana akışa geçmek istediğinde, View bu isteği ViewModel’e iletir. ViewModel, bu isteği Coordinator’a bildirir. Coordinator, navigasyonu yöneterek kullanıcının ana akışa yönlendirilmesini sağlar. Sonuç olarak, View kullanıcıya ana akışı gösterir.
6. View-Interactor-Presenter-Entity-Router (VIPER)
VIPER (View-Interactor-Presenter-Entity-Router), Clean Architecture’a benzer modüler bir mimaridir. Test edilebilirliği ve Tek Sorumluluk İlkesini vurgulayarak, uygulama mantığını belirgin bileşenlere ayırır.
View:
- Presenter’dan gelen bilgileri gösterir.
- Kullanıcı etkileşimlerini Presenter’a iletir.
Interactor:
- Kullanım durumu başına iş mantığını içerir.
- Verilerin işlenmesi ve iş kurallarını yönetir.
Presenter:
- İçeriği hazırlama mantığını içerir.
- View ile etkileşime girer ve Interactor’dan gelen verileri işler.
Entity:
- Birincil model nesnesini içerir.
- Uygulamanın veri yapısını temsil eder.
Router:
- Navigasyon mantığını içerir.
- Uygulama içi yönlendirmeleri yönetir.
Kullanım Alanları:
- Modülerlik ve Test Edilebilirlik Gerektiren Uygulamalar: Özellikle iOS uygulamalarında kullanılır. Her bileşenin tek bir sorumluluğa sahip olmasını ve kolayca test edilebilmesini sağlar. VIPER, Clean Architecture ile uyumlu olup, Java, Kotlin, Swift, Go gibi birçok dilde uygulanabilir. VIPER benzeri yapıların server-side uygulamalarda da modülerlik sağlamak için kullanılabilir.
- Örnek: Bir bankacılık uygulamasında, kullanıcı para transferi yapmak istediğinde, View bu isteği Presenter’a iletir. Presenter, isteği doğrulamak ve işlemek için Interactor’a iletir. Interactor, transfer işlemini Entity kullanarak gerçekleştirir ve sonucu Presenter’a döner. Presenter sonucu View’a iletir ve Router, kullanıcıyı transfer işlemi sonrasındaki sayfaya yönlendirir. View, kullanıcıya para transferinin başarıyla tamamlandığını gösterir.
İlgili mimari desenlerin proje bazlı olarak ihtiyaçların değerlendirilerek tercih edilmesi faydalı olacaktır. Daha detaylı kullanım örnekleri için GitHub tagleri ile aramalar yaparak doğrudan projeler üzerinde kullanım örneklerini inceleyebilirsiniz.
( design pics ref.)