← Ana Sayfaya Dön

Androidde MVVM

Kategori: Android5 Mart 2025

MVVM Nedir?

MVVM (Model-View-ViewModel), Android uygulamalarında UI kodunu iş mantığından ayırmayı amaçlayan bir mimari yapıdır.

  • Model: Uygulamanın veri katmanı, yani veritabanı, API, veya diğer veri kaynakları.

  • View: Kullanıcı arayüzü, aktiviteler, fragmentler veya XML dosyaları.

  • ViewModel: View ile Model arasında köprü görevi gören, UI verilerini yöneten ve iş mantığını içeriden ayıran sınıftır.

Neden MVVM Kullanmalıyız?

  • Bu mimari, UI ile veri ve iş mantığı arasındaki bağımlılığı azaltarak kodun okunabilirliğini ve sürdürülebilirliğini artırır.

  • İş mantığını ViewModel içinde topladığınız için, birim testleri yapmak daha kolaylaşır.

  • LiveData, StateFlow gibi yapıların kullanımı ile UI verilerindeki değişiklikleri otomatik olarak gözlemleyebiliriz.

MVVM Bileşenleri ve Kullanımı

1. Model

Verilerinizin tutulduğu ve API/Veritabanı işlemlerinin gerçekleştirildiği katmandır.

data class Besin( val isim: String, val kalori: String, val karbonhidrat: String, val protein: String, val yag: String, val gorsel: String )

2. ViewModel

ViewModel, UI ile Model arasındaki veri akışını yöneten sınıftır.

class BesinViewModel(application: Application) : AndroidViewModel(application) { private val besinApiService = BesinAPIService() // Retrofit API servisi val besinler = MutableLiveData<List<Besin>>() // UI ile gözlemlenecek veri val hataMesaji = MutableLiveData<Boolean>() val besinYukleniyor = MutableLiveData<Boolean>() // API'den veya veritabanından veri çekme işlemi fun verileriGetir() { besinYukleniyor.value = true viewModelScope.launch { try { val gelenBesinListesi = besinApiService.getData() besinler.value = gelenBesinListesi hataMesaji.value = false } catch (e: Exception) { hataMesaji.value = true } finally { besinYukleniyor.value = false } } } }
  • LiveData: UI bileşenleri, LiveData üzerinden ViewModel'deki veriyi gözlemler ve veri değiştiğinde otomatik güncellenir.

  • viewModelScope: Coroutine'leri yönetmek için kullanılır, böylece ViewModel'in yaşam döngüsü ile uyumlu çalışır.

3. View

View, Activity veya Fragment gibi UI bileşenleridir. Burada ViewModel ile etkileşim kurarak veri görüntülenir.

class BesinListeFragment : Fragment() { private lateinit var binding: FragmentBesinListeBinding private lateinit var viewModel: BesinViewModel override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { binding = FragmentBesinListeBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) viewModel = ViewModelProvider(this).get(BesinViewModel::class.java) // Verileri gözlemleme viewModel.besinler.observe(viewLifecycleOwner) { besinListesi -> // UI'yi güncelle (örneğin, RecyclerView adapterine aktar) } viewModel.verileriGetir() } }
  • ViewModelProvider: ViewModel'i oluşturup, yaşam döngüsüne uygun şekilde yönetir.
  • LiveData Gözlemi: viewModel.besinler.observe() ile veri değişikliklerini UI'da anında yansıtabilirsiniz.

MVVM'nin Avantajları

  • Bağımsızlık: ViewModel, UI'dan tamamen bağımsız çalışır. Bu, hem test edilebilirliği artırır hem de kodun bakımını kolaylaştırır.

  • Yaşam Döngüsü Desteği: ViewModel, Android yaşam döngüsü ile uyumlu çalışır; örneğin, konfigürasyon değişikliklerinde veri kaybı yaşanmaz.

  • Veri Güncelleme: LiveData ve Flow gibi yapıların kullanımı, UI verilerinde anlık değişiklikleri kolayca yakalamanızı sağlar.

Özet

  • MVVM mimarisi, Android uygulamalarında kodun düzenli, sürdürülebilir ve test edilebilir olmasını sağlar.

  • Model, ViewModel ve View bileşenlerini ayırarak, her birinin sorumluluğu net bir şekilde belirlenmiş olur.

  • Bu yaklaşım, uygulama geliştirme sürecini daha modüler ve esnek hale getirir.