Kotlin Flow vs LiveData: Neden Flow'u Tercih Ediyorum
Android geliştirmede LiveData yıllardır standart olmuştu. Ama Flow'u kullanmaya başladıktan sonra geri dönüş yok. Bunun nedenleri teknik kadar pratik.
LiveData neden yetersiz kaldı
LiveData Android Jetpack'ın parçası, lifecycle-aware ve basit. Ama sınırları hızlı belli oluyor. Veri akışını kontrol etmek zor; transformation zinciri kurduğunda kod karmaşıklaşıyor. Başka bir sorun: LiveData sadece Android context'inde çalışıyor. Unit test yazarken mock lifecycle gerekiyor. Ayrıca backpressure desteği yok, yüksek hızda veri gelirse sistem basabiliyor.
Flow neden daha güçlü
Flow, Kotlin coroutines üzerine inşa edilmiş ve dil seviyesinde reactive programlama sağlıyor. Lifecycle bağımlılığı yok; bu da test yazması çok kolay. Bir Flow'u normal bir unit test içinde direkt kullanabilirsin, mock yapmaya gerek yok.
Veri transformasyonu çok daha temiz. `map`, `filter`, `flatMapLatest` gibi operatörler doğal ve okunabilir. LiveData ile aynı işi yapmak için çok fazla boilerplate kod yazman gerekiyor.
Backpressure desteği önemli. Veri üretim hızı tüketim hızından fazlaysa Flow kontrol ediyor. LiveData'da bu yok; verileri kaçırabilirsin veya memory leak'e neden olabilirsin.
Pratik fark
LiveData ile:
1val data = MutableLiveData<String>()2data.value = "yeni veri"Flow ile:
1val data = MutableSharedFlow<String>()2data.emit("yeni veri")Bu basit görünse de, Flow'un coroutine desteği sayesinde async işlemleri çok daha zarif yazıyorsun. Repository'den database'den API'den gelen verileri birleştirmek Flow'da bir satırlık bir combine() ile oluyor.
Ne zaman LiveData kullanmalı
Bu yazıyı okuyunca LiveData'yı tamamen silme. Lifecycle-aware UI güncellemesi için LiveData hâlâ pratik. Özellikle Fragment veya Activity'de doğrudan observe etmek istersen, `lifecycleScope.launch` ile Flow'u kullanmak yeterli ama LiveData daha az kod gerektiriyor.
Ama veri katmanında, ViewModel'de, repository'de, her yerde Flow kullan. Test yazması kolay, performansı iyi, coroutine ekosistemiyle uyumlu.
Sonuç
Flow'a geçiş bir gün değil, ama yeni proje başlatırken LiveData'yı tercih etmemin hiçbir nedeni kalmadı. Google de aynı yöne gidiyor; resmi örneklerde Flow'u öne çıkarıyor. Kotlin reactive programlamanın geleceği Flow'da.
0 yorum