Günümüzde yazılım geliştirme dünyası, karmaşıklıkla başa çıkmak ve sürdürülebilir yazılım projeleri oluşturmak için çeşitli tasarım desenleri (Singleton, Factory, Adapter, Observer vs.) ve mimariler (Mikro servis, Servis Tabanlı, MVC vs.) sunmaktadır. Burada Android mobil uygulama geliştirme sürecinde kullandığımız iki güçlü kavramı ele alacağız: MVVM (Model-View-ViewModel) ve Sade Mimari. Bu iki kavram, yazılım geliştirme süreçlerini daha düzenli, bakımı kolay ve genel olarak daha verimli hale getirmek için kullanılan stratejilerdir.
MVVM, kullanıcı arayüzünü ve iş mantığını ayırma konusunda yardımcı olan bir tasarım deseni olarak öne çıkar. Sade Mimari ise yazılım projelerini bağımsız katmanlara ayırarak, değişikliklerin kolayca yönetilmesini ve test edilebilmesini sağlar. Bu yazıda, MVVM’in Android mobil uygulama geliştirme sürecinde nasıl kullanıldığını ve Sade Mimari prensipleri ile birleştirilerek nasıl güçlendirildiğini göreceğiz. İlerleyen kısımlarda, basit bir örnek uygulama üzerinden bu iki kavramın bir araya gelişini adım adım inceleyeceğiz.
İlk olarak bu iki kavramı inceleyerek başlayalım.
MVVM Nedir?
MVVM, (Model-View-ViewModel) yazılım geliştirme süreçlerinde kullanılan bir tasarım mimarisidir. MVVM, yazılım bileşenlerini ayrı tutarak uygulama geliştirme sürecini daha organize ve sürdürülebilir hale getirir.
MVVM’ in temel bileşenleri:
Model: Uygulamanın temel verilerini temsil eder.
View: Kullanıcı ara yüzünü temsil eder. Kullanıcının gördüğü ve etkileşimde bulunduğu ekranlardır.
ViewModel: View ile Model arasındaki köprüdür. View’ den gelen kullanıcı isteklerini işler ve View’ de görüntülenecek verileri hazırlar.
MVVM’in avantajları ise şu şekilde:
- Her bileşenin belli bir sorumluluğu olduğu için uygulama kodlarını daha modüler hale getirir.
- ViewModel, iş mantığını içerdiği için, bu katmandaki kodlar kolayca test edilebilir. Böylece uygulamanın daha güvenilir hale gelmesini sağlar.
- ViewModel, kullanıcı arayüzü kodundan bağımsızdır. Aynı ViewModel’ı farklı kullanıcı arayüzleriyle kullanma olanağı sağlar.
- Veri değişiklikleri otomatik olarak algılanır ve View’e güncellemeler iletilir. Böylece kullanıcı ara yüzünün verilere dinamik olarak tepki vermesi sağlanır.
Sade Mimari Nedir?
Yazılım projelerini bakımı kolay, esnek ve test edilebilir hale getirmeyi amaçlayan bir yaklaşımdır. Bu yaklaşım, yazılım projelerinin temel bileşenlerini belirlerken ve bu bileşenleri bir araya getirirken belli bir yapıyı ve kuralları takip eder. Sade Mimari, temel olarak yazılım projelerini bağımsız bileşenlere böler ve bu bileşenler arasındaki bağımlılıkları en aza indirgeyerek temiz ve düzenli bir kod temeli oluşturmayı hedefler.
Sade Mimari’nin ana özellikleri ise şu şekilde:
- Yazılım projelerini katmanlara ayırır ve her katmanın belirli bir sorumluluğu vardır. Bu katmanlar arasındaki bağımlılıklar en az derecede tutulur. Böylece her katmanı bağımsız olarak geliştirmek ve test etmek mümkün hale gelir.
- Dış katmanların iç katmanlara bağımlı olmasını, ancak iç katmanların dış katmanlara bağımlı olmamasını önerir.
- Bileşenlerin izole edilmesini ve bu bileşenlerin bağımsız olarak test edilebilir olmasını teşvik eder. Yazılımın daha güvenilir ve hata ayıklamanın daha kolay olmasını sağlar.
- Kullanıcı arayüzü kodunu diğer iş mantığı ve veri erişim katmanlarından bağımsız tutar.
MVVM ile Sade Mimari kurallarını uygulayabileceğimiz basit bir To Do List uygulamasının temel bileşenlerini aşağıdaki gibi yapabiliriz.
Sade Mimari prensiplerine uygun olarak, projemizi katmanlara böleriz.
Temel katmanlar:
- Presentation Layer: Kullanıcı ara yüzü ile ilgili kısımları içerir.
- Domain Layer: Uygulama iş mantığı ve kurallarını içerir.
- Data Layer: Veri tabanı işlemleri, API istekleri ve web servis erişimi ile ilgili kısımları içerir.
To Do List uygulaması için bu üç katmanı bir araya getirecek ana sınıflarımızı aşağıdaki şekilde isimlendirip görev dağılımını yapabiliriz.
- Task isimli model sınıfı
- TaskRepository isimli veri erişim sınıfı
- TaskViewModel isimli ViewModel sınıfı
- Kullanıcı ara yüzleri (.xml, Activity, Fragment)
TaskViewModel, TaskRepository’ e erişir, TaskRepository verileri sağlar ve bu verileri kullanıcı arayüzünde göstermek üzere LiveData veya Observable kullanır.
- Model (Domain Layer)
Task isimli model sınıfı şu şekilde:
- Repository (Data Layer)
Verileri saklamak ve erişmek için TaskRepository isimli sınıf şu şekilde:
- ViewModel (Presentation Layer)
- Kullanıcı Arayüzü (.xml, Activity, Fragment)
Taskları listelemek, güncellemek, eklemek ve silmek için xml’ler tasarlandıktan sonra ilgili Activity, Fragment içerisinde ViewModel aracılığıyla kullanıcı istekleri gerçekleştirilir.
MVVM ve Sade Mimari’nin doğru şekilde uygulanması, Android uygulama geliştirme verimliliğini şu yollarla arttırır:
- Sade Mimari, uygulamanın temel iş kurallarını, veri erişimini ve kullanıcı ara yüzünü ayrı katmanlarda düzenleme imkanı sağlar. MVVM, kullanıcı ara yüzü ve iş mantığı arasındaki bağlantıyı oluşturur. Bu, kodu daha iyi organize etmeye ve kodun bakımını yapmaya yardımcı olur.
- Her ikisi de bağımsızlığı vurgular. ViewModel, kullanıcı ara yüzünden bağımsızdır ve Sade Mimari her katmanda diğerlerinden bağımsızdır. Bu, kodun daha iyi test edilebilir ve yeniden kullanılabilir olmasını sağlar.
- MVVM, kullanıcı ara yüzü ile veri kaynakları arasındaki iletişimi düzenler. Sade Mimari, bu veri kaynaklarını soyutlar ve yönetir. Bu sayede, veri kaynaklarının değişmesi veya güncellenmesi durumunda daha kolay bir şekilde adapte olmasını sağlar.
- Hem MVVM hem Sade Mimari, kodun test edilebilir olmasına odaklanır.
- Sade Mimari, veri tabanı erişimini ayrı bir katmanda tutar. Bu, veri tabanı işlemlerinin değiştirilmesi veya yükseltilmesi gerektiğinde uygulamanın daha az etkilenmesini sağlar.
- Her iki yaklaşım da modüler bir kod yapısını teşvik eder. Modülerlik, yeni özellikler eklemeyi veya mevcutları güncellemeyi kolaylaştırır.
- Sade Mimari, iş kurallarını merkezi bir şekilde yönettiği için uygulama güvenliğini sağlar. Veri erişimine sıkı kontroller eklemek ve kullanıcı ara yüzünden doğrudan veriye erişimi önlemek, güvenlik açıklarını azaltır.
Bu yazı boyunca, Android uygulama geliştirmenin iki güçlü konsepti olan MVVM ve Sade Mimari’nin nasıl birleştirildiğini ve nasıl kullanıldığını inceledik. MVVM, kullanıcı ara yüzü tasarımını daha yönetilebilir ve bakımı daha kolay hale getirmek için iş mantığından ayırmamıza yardımcı olurken; Sade Mimari, projeyi bağımsız ve test edilebilir katmanlara böler, böylece proje büyüdükçe daha sürdürülebilir hale gelir.
Bu güçlü ikili, Android uygulamalarının geliştirilmesini daha düzenli hale getirirken, aynı zamanda kodun daha anlaşılır, test edilebilir ve yeniden kullanılabilir olmasını sağlar.
Sonuç olarak, MVVM ile Sade Mimari’yi doğru şekilde kullanarak, daha kaliteli Android uygulamaları oluşturabilir ve geliştirme sürecini daha verimli hale getirebiliriz.
Bu konseptleri tam anlamıyla kavramak ve uygulamak zaman alsa da, uzun vadede getirileri fazlasıyla olacaktır.
Referanslar:
- https://github.com/ahmedeltaher/MVVM-Kotlin-Android-Architecture, Erişim tarihi: 1 Ağustos 2023
- https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html, Erişim tarihi: 14 Haziran 2023
- https://developer.android.com/topic/architecture?hl=en#recommended-app-arch, Erişim tarihi: 1 Ağustos 2023
- https://dev.to/whatminjacodes/simple-example-of-mvvm-architecture-in-kotlin-4j5b Erişim tarihi: 5 Eylül 2023