TGTGInsighttelegram intelligenceLIVE / telegram public index
← Android Broadcast
Android Broadcast avatar

TGINSIGHT POST

Post #8639

@android_broadcast

Android Broadcast

Vues6,420Nombre de vues
Publié5 févr.05/02/2025 16:15
Contenu

Contenu du post

🤯Не нужно делать инжект всех зависимостей в конструктор Встретил код в проекте: class MyViewModel( ... private val sendDataUseCase: SendDataUseCase, ... ): ViewModel() { // Вызывается, когда пользователь в UI нажмёт на "Send" fun onSendClicked(...) { viewModelScope.launch { sendDataUseCase.invoke(...) // либо sendDataUseCase(...) } } } sendDataUseCase не нужен сразу при создании объекта, а нужен только если пользователь нажмёт на кнопку "Send" в UI, что может и не произойти. Так как эта зависимость нужна в конструкторе, то при получении в DI будет сразу происходить создание этой зависимости, что приводит к ненужной нагрузке. Я рекомендую делать отложенное получение зависимостей с помощью механизма Provider или Lazy. Первый будет ходить за зависимостью в граф каждый раз, а второй - при первом обращении и сохранит её. // При использовании Dagger или Hilt class MyViewModel( ... private val sendDataUseCase: javax.inject.Provider<SendDataUseCase>, // или dagger.Lazy ... ): ViewModel() { fun onSendClicked(...) { viewModelScope.launch { sendDataUseCase.get() .invoke(...) } } } Если вы используете Koin на момент написания поста (актуальная версия 4.0), делать отложенный инжект в конструктор возможности нет: // При использовании Koin class MyViewModel(): ViewModel() { // отложенное получение зависимости в Koin private val sendDataUseCase: SendDataUseCase by inject() fun onSendClicked(...) { viewModelScope.launch { // аналог Provider - получение зависимости каждый раз из графа val sendDataUseCase: SendDataUseCase = getKoin().get() sendDataUseCase.invoke(...) } } } Результат оптимизации ✅ более быстрый старт экранов (зависит от сложности графов) ✅ уменьшение расхода памяти ❌ KOIN потеря явной зависимости в конструкторе. Мне бы очень хотелось увидеть аналог Provider и Lazy в Koin через конструктор, но пока приходится делать свои обертки 😔 #dagger#di#лучшиепрактики