Middle
Android tətbiqlərinin inkişafında Dagger istifadə ilə tanışsınızmı?
sobes.tech Süni İntellekt
AI-dan cavab
Bəli, tanışam. Dagger — bu, Java və Android-də asılılıq inyeksiyası (Dependency Injection, DI) üçün istifadə olunan çərçivədir, hansı ki, yığma zamanı tərtib olunur və optimallaşdırılmış, məhsuldar və asan test edilə bilən kod yaratmağa imkan verir.
Əsas konseptlər aşağıdakılardır:
- Modullar (Modules): Asılılıqları təmin edir.
@Moduleilə qeyd olunur. Modul daxilində@Providesilə işarələnmiş metodlar konkret asılılığın necə yaradılacağını təsvir edir.@Module public class AppModule { @Provides // tətbiqin kontekstini təmin edir Context provideAppContext(Application application) { return application.getApplicationContext(); } @Provides // SharedPreferences təmin edir SharedPreferences provideSharedPreferences(Context context) { return context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE); } } - Komponentlər (Components): Modulları birləşdirir və asılılıqları inyeksiyaya edir.
@Componentilə qeyd olunur. Komponentlər "asılılıq qrafikləri"dir.@Singleton @Component(modules = {AppModule.class}) // tətbiq komponenti public interface AppComponent { // MainActivity-də inyeksiya üçün metod void inject(MainActivity activity); // qrafikdən SharedPreferences əldə etmək üçün metod SharedPreferences getSharedPreferences(); } - İnyeksiya (Injection): Asılılıqların tətbiqidir.
@Injectilə sahələr və ya konstruktorlar qeyd olunur.public class MainActivity extends AppCompatActivity { @Inject // Dagger-in inyeksiyaya edəcəyi asılılıq SharedPreferences sharedPrefs; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Dagger qrafik yaratmaq və inyeksiyanı həyata keçirmək üçün kodu nəsil edir ((MyApplication) getApplication()).getAppComponent().inject(this); // indi sharedPrefs əlçatandır String value = sharedPrefs.getString("key", "default"); Log.d("MainActivity", "SharedPreferences-dən dəyər: " + value); } } - Scope-lar (Görünüş sahələri): Asılılıqların həyat dövrünü idarə etməyə imkan verir.
@Singletontətbiq həyat dövrü üçün, istifadəçi tərəfindən xüsusi anotasiya ilə daha dar sahələr üçün (məsələn,@PerActivity).@Scope @Retention(RetentionPolicy.RUNTIME) // istifadəçi tərəfindən yaradılmış görünüş sahəsi aktivlik üçün public @interface PerActivity {}
Dagger həmçinin daha kiçik, iyerarxik qrafiklər yaratmaq üçün @Subcomponent alt-komponentlərini dəstəkləyir, bu da modullu tətbiqlər və ya qısa həyat dövrü olan asılılıqlar üçün (məsələn, istifadəçi sessiyaları və ya konkret ekranlar) faydalıdır.
Dagger istifadə etmənin əsas üstünlükləri:
- Məhsuldarlıq: Yığma zamanı kodun nəsil edilməsi, reflektiv DI çərçivələri ilə müqayisədə işləmə vaxtı xərclərini azaldır.
- Yoxlama qabiliyyəti: Qrafik yığma zamanı yoxlanır, səhvlər yığma mərhələsində aşkarlanır, işləmə zamanı yox.
- Test edilə bilənlik: Test zamanı real asılılıqları mock obyektlərlə əvəz etməyə imkan verir.
- Oxunaqlıq və dəstəklənmə: Sistem komponentlərinin asılılıqlarını açıq şəkildə təsvir edir.