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

TGINSIGHT POST

Post #8639

@android_broadcast

Android Broadcast

Views6,420Post view count
PostedFeb 502/05/2025, 04:15 PM
Post content

Post content

🀯НС Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ всСх зависимостСй Π² конструктор ВстрСтил ΠΊΠΎΠ΄ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅: 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#Π»ΡƒΡ‡ΡˆΠΈΠ΅ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ