ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
Dependency Injection (DI) ဆိုတာ class တစ်ခုကို 'ကိုယ့်ဒီပန်ဒင့်စီတွေကို ကိုယ်တိုင် create မလုပ်ဘဲ, ပြင်ပက ပေးပို့ခံရတယ်' ဆိုတဲ့ pattern ပါ — testing/maintainability ပိုကောင်းစေပါတယ် (test အတွက် fake dependency ကို inject လို့ရလို့)။ Hilt က Google ရဲ့ official Android DI library ပါ — `@Inject` annotation ကို constructor ပေါ်ထားရုံနဲ့, Hilt က dependency (Retrofit, Room database) ကို automatic create/provide ပေးပါတယ် — manual `Retrofit.Builder()...build()` ကို ViewModel တစ်ခုချင်းစီမှာ ထပ်ခါထပ်ခါ ရေးစရာ မလိုတော့ပါ.
လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
`@HiltViewModel class TodoViewModel @Inject constructor(private val dao: TodoDao) : ViewModel() { ... }` လို့ ရေးထားရင် — Hilt က `TodoDao` instance ကို automatic create/inject ပေးပါတယ်, `TodoViewModel()` ကို manual dao parameter ပေးစရာ မလိုတော့ပါ (`viewModel()` Composable function ကနေ တိုက်ရိုက် ရရှိနိုင်ပါတယ်).
အတူတူ ကြည့်မယ်
@HiltViewModel
class TodoViewModel @Inject constructor(
private val dao: TodoDao,
private val weatherApi: WeatherApi
) : ViewModel() {
// dao and weatherApi are automatically provided by Hilt —
// no manual Retrofit.Builder()/Room.databaseBuilder() calls here
}
@Composable
fun TodoScreen(viewModel: TodoViewModel = hiltViewModel()) {
// ...
}TodoViewModel ကို hiltViewModel() ကနေ ရယူရင် dao/weatherApi ကို manual pass မလိုဘဲ ready ဖြစ်နေတာ တွေ့ရမည်။၅ မိနစ် စမ်းကြည့်
Hilt setup (documentation review — `@HiltAndroidApp`, `@Module`, `@Provides` annotation) ကို ဖတ်ရှုပြီး, `TodoDao`/`WeatherApi` ကို Hilt module အဖြစ် ဘယ်လို provide ရမလဲ ဒီဇိုင်းရေးကြည့်ပါ။
သတိလေးတစ်ချက်
Hilt annotation processing ကြောင့် build time ခဏ ကြာနိုင်ပါတယ် — project အသေးစား (learning project) အတွက် Hilt setup ရဲ့ complexity က overkill ဖြစ်နိုင်တာကို သတိထားပါ။