đ ViewModel – āĻĢিāĻাāϰ āĻ āĻŦ্āϝāĻŦāĻšাāϰ (Brain-Friendly āĻŦ্āϝাāĻ্āϝা!)
đ ViewModel – āĻĢিāĻাāϰ āĻ āĻŦ্āϝāĻŦāĻšাāϰ (Brain-Friendly āĻŦ্āϝাāĻ্āϝা!) đ¯
đ ViewModel āĻী?
ViewModel āĻšāϞ Jetpack āϞাāĻāĻŦ্āϰেāϰিāϰ āĻāĻāĻি āĻ্āϞাāϏ, āϝা UI-āĻāϰ āϏাāĻĨে āϏāĻŽ্āĻĒāϰ্āĻিāϤ āĻĄাāĻা āϏংāϰāĻ্āώāĻŖ āĻ āĻĒāϰিāĻাāϞāύা āĻāϰে, āϝাāϤে āϏ্āĻ্āϰিāύ āϰিāĻĢ্āϰেāĻļ āĻŦা āĻ ্āϝাāĻ্āĻিāĻিāĻি āϧ্āĻŦংāϏ āĻšāϞেāĻ āĻĄাāĻা āĻšাāϰিā§ে āύা āϝাā§।
✨ ViewModel-āĻāϰ āĻুāϰুāϤ্āĻŦāĻĒূāϰ্āĻŖ āĻĢিāĻাāϰāϏāĻŽূāĻš
1️⃣ UI-āĻāϰ āĻāύ্āϝ āĻĄাāĻা āϏংāϰāĻ্āώāĻŖ āĻāϰে
đ UI-āĻāϰ āϏাāĻĨে āϏāĻŽ্āĻĒāϰ্āĻিāϤ āĻĄাāĻা āϏংāϰāĻ্āώāĻŖ āĻāϰāϤে ViewModel āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰা āĻšā§, āϝাāϤে āϏ্āĻ্āϰিāύ āĻোāϰাāϞেāĻ (Configuration Change) āĻĄাāĻা āĻšাāϰাā§ āύা।
āĻāĻĻাāĻšāϰāĻŖ:
class CounterViewModel : ViewModel() {
var count by mutableStateOf(0)
private set
fun increment() {
count++
}
}
➡️ āĻāĻাāύে ViewModel "count" āĻĄাāĻা āϏংāϰāĻ্āώāĻŖ āĻāϰāĻে, āϝা UI-āĻāϰ āϏাāĻĨে āϏংāϝুāĻ্āϤ āĻĨাāĻāĻŦে।
2️⃣ Configuration Change āĻিāĻে āĻĨাāĻāϤে āĻĒাāϰে
đ āĻ āύ্āϝ āĻোāύো āĻ্āϞাāϏ āĻŦা āĻেāϰিā§েāĻŦāϞ āϏāϰাāϏāϰি UI-āϤে āϏংāϰāĻ্āώāĻŖ āĻāϰāϞে āϏ্āĻ্āϰিāύ āĻোāϰাāύোāϰ (orientation change) āϏāĻŽā§ āĻĄাāĻা āĻšাāϰিā§ে āϝাāĻŦে। āĻিāύ্āϤু ViewModel āĻŦ্āϝāĻŦāĻšাāϰেāϰ āĻĢāϞে āĻĄাāĻা āĻিāĻে āĻĨাāĻāĻŦে।
✔️ āϝেāĻŽāύ:
@Composable
fun CounterScreen(viewModel: CounterViewModel = viewModel()) {
Column {
Text("Count: ${viewModel.count}")
Button(onClick = { viewModel.increment() }) {
Text("Increment")
}
}
}
✅ āĻāĻāύ āϏ্āĻ্āϰিāύ āϰিāĻĢ্āϰেāĻļ āĻšāϞেāĻ count āĻšাāϰাāĻŦে āύা!
3️⃣ Lifecycle-Aware (āϞাāĻāĻĢāϏাāĻāĻেāϞ āĻŽেāύে āĻāϞে)
đ ViewModel āĻ ্āϝাāĻ্āĻিāĻিāĻি āĻŦা āĻĢ্āϰ্āϝাāĻāĻŽেāύ্āĻ āϧ্āĻŦংāϏ āύা āĻšāĻā§া āĻĒāϰ্āϝāύ্āϤ āϞাāĻāĻĢāϏাāĻāĻেāϞ āĻŽেāύে āĻāϞে, āϤাāĻ āĻŽেāĻŽোāϰি āϞিāĻ āĻāĻŽ āĻšā§।
✔️ āĻāĻĻাāĻšāϰāĻŖ:
class MyViewModel : ViewModel() {
init {
println("ViewModel Created!") // āĻļুāϧু āĻāĻāĻŦাāϰ āĻāϞāĻŦে
}
override fun onCleared() {
println("ViewModel Destroyed!") // āϝāĻāύ āĻ
্āϝাāĻ্āĻিāĻিāĻি āϧ্āĻŦংāϏ āĻšāĻŦে āϤāĻāύ āĻāϞāĻŦে
}
}
✅ ViewModel āϤৈāϰি āĻšāĻā§াāϰ āĻĒāϰ āϝāϤāĻŦাāϰ UI āϰিāĻĢ্āϰেāĻļ āĻšোāĻ, āύāϤুāύ āĻāϰে āϤৈāϰি āĻšāĻŦে āύা!
4️⃣ Dependency Injection āϏাāĻĒোāϰ্āĻ āĻāϰে
đ Hilt āĻŦা āĻ āύ্āϝ DI āϞাāĻāĻŦ্āϰেāϰি āĻĻিā§ে āϏāĻšāĻেāĻ ViewModel āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰা āϝাā§, āϝা āĻোāĻĄ āĻ্āϞিāύ āĻ āĻŽāĻĄুāϞাāϰ āĻāϰে।
✔️ Hilt āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰে ViewModel:
@HiltViewModel
class MyViewModel @Inject constructor(
private val repository: MyRepository
) : ViewModel() {
val data = repository.getData()
}
✅ āĻāϤে āĻĄাāĻা āĻ āϞāĻিāĻ āĻŽāĻĄুāϞাāϰ āĻ āϏāĻšāĻāĻাāĻŦে āĻŦ্āϝāĻŦāϏ্āĻĨাāĻĒāύা āĻāϰা āϝাā§।
5️⃣ Coroutines āĻāĻŦং LiveData / StateFlow āϏাāĻĒোāϰ্āĻ āĻāϰে
đ ViewModel āĻāϰ āϏাāĻĨে Coroutines āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰে āĻŦ্āϝাāĻāĻ্āϰাāĻāύ্āĻĄ āĻাāĻ āĻāϰা āϝাā§।
✔️ Coroutine āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰে āĻĄাāĻা āϞোāĻĄ āĻāϰা:
class MyViewModel : ViewModel() {
private val _data = MutableLiveData<String>()
val data: LiveData<String> = _data
fun fetchData() {
viewModelScope.launch {
delay(2000) // āϏিāĻŽুāϞেāĻেāĻĄ āϞোāĻĄিং āĻাāĻāĻŽ
_data.value = "Data Loaded!"
}
}
}
✅ āĻāϤে UI āĻŦ্āϞāĻ āύা āĻāϰেāĻ āĻĄাāĻা āϞোāĻĄ āĻāϰা āϝাā§।
đ ️ ViewModel-āĻāϰ āĻŦ্āϝāĻŦāĻšাāϰ āĻোāĻĨাā§?
đš UI State āĻŽ্āϝাāύেāĻ āĻāϰāϤে – āϝেāĻŽāύ: āĻাāĻāύ্āĻাāϰ, āϞিāϏ্āĻ, āĻেāĻ্āϏāĻ āĻāύāĻĒুāĻ āĻāϤ্āϝাāĻĻি।
đš Configuration Change āĻĨেāĻে āĻŦাঁāĻāϤে – āϏ্āĻ্āϰিāύ āĻোāϰাāϞে āĻŦা āĻ
্āϝাāĻ্āĻিāĻিāĻি āϧ্āĻŦংāϏ āĻšāϞেāĻ āĻĄাāĻা āĻĨাāĻāĻŦে।
đš Background Task āĻĒāϰিāĻাāϞāύা āĻāϰāϤে – āĻŦ্āϝাāĻāĻ্āϰাāĻāύ্āĻĄে āĻĄাāĻা āϞোāĻĄ āĻŦা API āĻāϞ āĻāϰāϤে।
đš Lifecycle-Aware Data Store āĻāϰāϤে – āϝেāĻŽāύ: LiveData, Flow āĻŦা StateFlow āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰে UI āĻāĻĒāĻĄেāĻ āĻāϰা।
đš Dependency Injection-āĻāϰ āϏাāĻĨে āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰāϤে – āϝেāĻŽāύ Hilt āĻŦা Dagger।
đ āϏংāĻ্āώেāĻĒে ViewModel
✔️ UI-āĻāϰ āĻāύ্āϝ āĻĄাāĻা āϏংāϰāĻ্āώāĻŖ āĻāϰে।
✔️ Configuration Change āĻšāϞেāĻ āĻĄাāĻা āĻšাāϰাā§ āύা।
✔️ Lifecycle-aware, āϤাāĻ āĻŽেāĻŽোāϰি āĻ
āĻĒāĻā§ āĻāĻŽ āĻšā§।
✔️ Background Task āĻĒāϰিāĻাāϞāύা āĻāϰāϤে āĻĒাāϰে।
✔️ Dependency Injection āϏāĻšāĻ āĻāϰে।
✔️ Coroutines, LiveData, StateFlow-āĻāϰ āϏাāĻĨে āĻাāĻ āĻāϰে।
đĨ āĻāĻāύ āĻāĻĒāύি ViewModel-āĻāϰ āĻļāĻ্āϤি āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰে Jetpack Compose-āĻ āϏ্āĻŽাāϰ্āĻ āĻ āĻĒাāϰāĻĢāϰāĻŽ্āϝাāύ্āĻ āĻ ্āϝাāĻĒ āϤৈāϰি āĻāϰāϤে āĻĒাāϰāĻŦেāύ! đ
Comments
Post a Comment