تعریف و تمجید یک ماژول Koin
مراد از ماژول در Koin یک کامپوننت میباشد که در آن تمامی تعلقهایی که در کامپوننتهای دیگر تزریق میگردند را اعلان می کنیم. برای مثال سبک نما که در اکتیویتی استعمال می شود، دراین ماژول اعلان شود. براین اساس یک ماژول اعلان میکنیم که برای ما نوبتای از یک «سبک نما» (View Model) میسازد. به دنبال خواهیم روئت کرد که عملیاتی که Koin برای ما اعمال می دهد، کاهش کد Boiler plate میباشد که در حین ساخت و ساز دفعهای از سبک نما به طور پیشفرض ساختوساز طراحی اپلیکیشن در مشهد میکردیم.
برای ساختوساز ماژول بایستی از تابعی به اسم module به کارگیری کنیم که یک لامبدا تحت عنوان پارامتر میگیرد و می بایست ارجاعی به ماژول در متغیر داشته باشیم.
پوشه Module.kt
1val viewModelModule = module {
2 viewModel {
3 UserViewModel(get())
4 }
5}
6
7val repositoryModule = module {
8 single {
9 UserRepository(get())
10 }
11}
12
13val apiModule = module {
14 fun provideUseApi(retrofit: Retrofit): GithubApi {
15 return retrofit.create(GithubApi::class.java)
16 }
17
18 single { provideUseApi(get()) }
19}
20
21val retrofitModule = module {
22
23 fun provideGson(): Gson {
24 return GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.IDENTITY).create()
25 }
26
27 fun provideHttpClient(): OkHttpClient {
28 val okHttpClientBuilder = OkHttpClient.Builder()
29
30 return okHttpClientBuilder.build()
31 }
32
33 fun provideRetrofit(factory: Gson, client: OkHttpClient): Retrofit {
34 return Retrofit.Builder()
35 .baseUrl("https://api.github.com/")
36 .addConverterFactory(GsonConverterFactory.create(factory))
37 .client(client)
38 .build()
39 }
40
41 single { provideGson() }
42 single { provideHttpClient() }
43 single { provideRetrofit(get(), get()) }
44}
مشاهده بدون نقص کدها
در کد فوق از یکسری تابع Koin برای مدیر تعلقهای متفاوت نرم افزارمان سود میگیریم.
ViewModel: یک کامپوننت ViewModel اعلان میکنیم و آن را به چرخه قدمت کامپوننت اندروید اتصال می دهیم.
()Get: دراین مثل کلاس UserViewModel می بایست نوبتای از UserRepository را تحت عنوان پارامتر بگیرد و از این رو از get() در Koin استعمال می کنیم تا آن را به دست آوریم. این اسلوب فقط هنگامی عمل مینماید که یک ماژول وجود داشته باشد کهاین تعلق را ارائه نماید، در غیر این شکل Koin تعلق را پیدا نمینماید.
Single: به Koin اعلام مینماید که یک سینگلتون ساختوساز نماید. این دفعه صرفا در حین اجرای نرم افزار تولید خواهد شد.
قدم 5: استارت به شغل Koin
فعلا که ماژولها فراهم گردیدهاند، قادر خواهیم بود آغاز به فعالیت با Koin بکنیم. آغاز کلاس نرم افزار را گشوده و یا این که آن را ساختوساز نمائید. دقت داشته باشید که بایستی آن را در manifest.xml اعلان فرمایید. کافی میباشد تابع startKoin() را که یک لامبدا می گیرد فراخوانی فرمائید و در آن لیستی از ماژولها را با استعمال از تابع modules(module: List) تعریف و تمجید نمائید:
فولدر App.kt
1class App : Application() {
2 override fun onCreate() {
3 super.onCreate()
4 startKoin {
5 androidLogger(Level.DEBUG)
6 androidContext(this@App)
7 modules(listOf(repositoryModule, viewModelModule, retrofitModule, apiModule))
8 }
9 }
10}
قدم 6: تزریق تعلقها
کامپوننت UserViewModel با به کارگیری از دفعه UserRepository ساخته میگردد. برای این که آن را وارد اکتیویتی بکنید، می بایست آن را با استعمال از تزریق کننده واسط by viewModel() تزریق فرمایید:
پوشه MainActivity.kt
1class MainActivity : AppCompatActivity() {
2
3 private val userViewModel by viewModel()
4
5 override fun onCreate(savedInstanceState: Bundle?) {
6 super.onCreate(savedInstanceState)
7 setContentView(R.layout.activity_main)
8
9 userViewModel.data.observe(this, Observer {
10 // Populate the UI
11 })
12
13 userViewModel.loadingState.observe(this, Observer {
14 // Observe the loading state
15 })
16 }
17}
مشاهده بدون نقص کدها
حرف نهایی
Koin در همگی جا از نرم افزارهای تلفن همراه تا اینترنت موجب سهولت تزریق تعلق میگردد و نباید دربارهی به کارگیری از آن نگرانی داشته باشید. Koin یک فریمورک قادر میباشد که به ارتقاء سودوری عمل با کاتلین امداد مینماید.
تعریف و تمجید یک ماژول Koin
مراد از ماژول در Koin یک کامپوننت میباشد که در آن تمامی تعلقهایی که در کامپوننتهای دیگر تزریق میگردند را اعلان می کنیم. برای مثال سبک نما که در اکتیویتی استعمال می شود، دراین ماژول اعلان شود. براین اساس یک ماژول اعلان میکنیم که برای ما نوبتای از یک «سبک نما» (View Model) میسازد. به دنبال خواهیم روئت کرد که عملیاتی که Koin برای ما اعمال می دهد، کاهش کد Boiler plate میباشد که در حین ساخت و ساز دفعهای از سبک نما به طور پیشفرض ساختوساز طراحی اپلیکیشن در مشهد میکردیم.
برای ساختوساز ماژول بایستی از تابعی به اسم module به کارگیری کنیم که یک لامبدا تحت عنوان پارامتر میگیرد و می بایست ارجاعی به ماژول در متغیر داشته باشیم.
پوشه Module.kt
1val viewModelModule = module {
2 viewModel {
3 UserViewModel(get())
4 }
5}
6
7val repositoryModule = module {
8 single {
9 UserRepository(get())
10 }
11}
12
13val apiModule = module {
14 fun provideUseApi(retrofit: Retrofit): GithubApi {
15 return retrofit.create(GithubApi::class.java)
16 }
17
18 single { provideUseApi(get()) }
19}
20
21val retrofitModule = module {
22
23 fun provideGson(): Gson {
24 return GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.IDENTITY).create()
25 }
26
27 fun provideHttpClient(): OkHttpClient {
28 val okHttpClientBuilder = OkHttpClient.Builder()
29
30 return okHttpClientBuilder.build()
31 }
32
33 fun provideRetrofit(factory: Gson, client: OkHttpClient): Retrofit {
34 return Retrofit.Builder()
35 .baseUrl("https://api.github.com/")
36 .addConverterFactory(GsonConverterFactory.create(factory))
37 .client(client)
38 .build()
39 }
40
41 single { provideGson() }
42 single { provideHttpClient() }
43 single { provideRetrofit(get(), get()) }
44}
مشاهده بدون نقص کدها
در کد فوق از یکسری تابع Koin برای مدیر تعلقهای متفاوت نرم افزارمان سود میگیریم.
ViewModel: یک کامپوننت ViewModel اعلان میکنیم و آن را به چرخه قدمت کامپوننت اندروید اتصال می دهیم.
()Get: دراین مثل کلاس UserViewModel می بایست نوبتای از UserRepository را تحت عنوان پارامتر بگیرد و از این رو از get() در Koin استعمال می کنیم تا آن را به دست آوریم. این اسلوب فقط هنگامی عمل مینماید که یک ماژول وجود داشته باشد کهاین تعلق را ارائه نماید، در غیر این شکل Koin تعلق را پیدا نمینماید.
Single: به Koin اعلام مینماید که یک سینگلتون ساختوساز نماید. این دفعه صرفا در حین اجرای نرم افزار تولید خواهد شد.
قدم 5: استارت به شغل Koin
فعلا که ماژولها فراهم گردیدهاند، قادر خواهیم بود آغاز به فعالیت با Koin بکنیم. آغاز کلاس نرم افزار را گشوده و یا این که آن را ساختوساز نمائید. دقت داشته باشید که بایستی آن را در manifest.xml اعلان فرمایید. کافی میباشد تابع startKoin() را که یک لامبدا می گیرد فراخوانی فرمائید و در آن لیستی از ماژولها را با استعمال از تابع modules(module: List) تعریف و تمجید نمائید:
فولدر App.kt
1class App : Application() {
2 override fun onCreate() {
3 super.onCreate()
4 startKoin {
5 androidLogger(Level.DEBUG)
6 androidContext(this@App)
7 modules(listOf(repositoryModule, viewModelModule, retrofitModule, apiModule))
8 }
9 }
10}
قدم 6: تزریق تعلقها
کامپوننت UserViewModel با به کارگیری از دفعه UserRepository ساخته میگردد. برای این که آن را وارد اکتیویتی بکنید، می بایست آن را با استعمال از تزریق کننده واسط by viewModel() تزریق فرمایید:
پوشه MainActivity.kt
1class MainActivity : AppCompatActivity() {
2
3 private val userViewModel by viewModel()
4
5 override fun onCreate(savedInstanceState: Bundle?) {
6 super.onCreate(savedInstanceState)
7 setContentView(R.layout.activity_main)
8
9 userViewModel.data.observe(this, Observer {
10 // Populate the UI
11 })
12
13 userViewModel.loadingState.observe(this, Observer {
14 // Observe the loading state
15 })
16 }
17}
مشاهده بدون نقص کدها
حرف نهایی
Koin در همگی جا از نرم افزارهای تلفن همراه تا اینترنت موجب سهولت تزریق تعلق میگردد و نباید دربارهی به کارگیری از آن نگرانی داشته باشید. Koin یک فریمورک قادر میباشد که به ارتقاء سودوری عمل با کاتلین امداد مینماید.

کارداران اثر گذار بر CPC در تبلیغات