Sobes.tech
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. @Module ilə qeyd olunur. Modul daxilində @Provides ilə 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. @Component ilə 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. @Inject ilə 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. @Singleton tə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.