Sobes.tech
Middle

Android колдонмолорун иштеп чыгууда Dagger колдонуу менен таанышсызбы?

sobes.tech AI

AIден жооп

Ооба, таанысам. Dagger — бул Java жана Android үчүн көзкарандычтык киргизүү (Dependency Injection, DI) чөйрөсү, ал куруу учурунда компиляцияланат жана оптималдаштырылган, натыйжалуу жана оңой тесттелүүчү код түзүүгө мүмкүндүк берет.

Негизги түшүнүктөр төмөнкүлөрдү камтыйт:

  • Модулдар (Modules): көзкарандычтык байланышты камсыз кылат. @Module менен белгиленет. Модулдун ичинде @Provides менен белгиленген методдор конкреттүү көзкарандычтык байланышты түзүүнүн жолун сүрөттөйт.
    @Module
    public class AppModule {
    
        @Provides
        // тиркеменин контекстин камсыз кылат
        Context provideAppContext(Application application) {
            return application.getApplicationContext();
        }
    
        @Provides
        // SharedPreferences камсыз кылат
        SharedPreferences provideSharedPreferences(Context context) {
            return context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
        }
    }
    
  • Компоненттер (Components): модулдарды бириктирет жана көзкарандычтык байланышты киргизет. @Component менен белгиленет. Компоненттер — "көзкарандычтык графиктер".
    @Singleton
    @Component(modules = {AppModule.class})
    // тиркеменин компоненттери
    public interface AppComponent {
    
        // MainActivityге киргизүү үчүн метод
        void inject(MainActivity activity);
    
        // графиктен SharedPreferences алуу үчүн метод
        SharedPreferences getSharedPreferences();
    }
    
  • Киргизүү (Injection): көзкарандычтык байланышты киргизүү процесси. @Inject колдонулат талааларга же конструкторлорго.
    public class MainActivity extends AppCompatActivity {
    
        @Inject
        // Dagger киргизе турган көзкарандычтык байланыш
        SharedPreferences sharedPrefs;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // Dagger код түзүп, компонентти түзөт жана киргизет
            ((MyApplication) getApplication()).getAppComponent().inject(this);
    
            // эми sharedPrefs жеткиликтүү
            String value = sharedPrefs.getString("key", "default");
            Log.d("MainActivity", "SharedPreferencesтен мааниси: " + value);
        }
    }
    
  • Областтар (Scopes): көзкарандычтык байланыштын жашоо циклин башкарууга мүмкүндүк берет. @Singleton — тиркеменин жашоо цикли үчүн, колдонуучу белгилеген белгилөөлөр — кеңири аймактар үчүн (мисалы, @PerActivity).
    @Scope
    @Retention(RetentionPolicy.RUNTIME)
    // колдонуучу белгилеген аймак активдүүлүк үчүн
    public @interface PerActivity {}
    

Dagger ошондой эле кичирээк, иерархиялык графиктер түзүү үчүн @Subcomponent колдойт, бул модулдуу тиркемелер же кыска жашоо циклине ээ көзкарандычтык байланышы бар (мисалы, колдонуучу сессиялары же конкреттүү экрандар) үчүн пайдалуу.

Dagger колдонуу негизги артыкчылыктары:

  • Өндүрүмдүүлүк: Компиляция учурунда түзүлгөн код аткаруу убактысынын чыгымдарын минималдаштырат, рефлексиялык DI рамкаларына салыштырмалуу.
  • Текшерүү мүмкүнчүлүгү: Компилятор көзкарандычтык графикти текшерет, каталарды куруу учурунда аныктайт, аткаруу учурунда эмес.
  • Тесттелүүчүлүк: Чын көзкарандычтык байланышты mock объекттер менен алмаштырууну жеңилдетет.
  • Ачык жана оңой кармалган: системанын компоненттеринин көзкарандычтык байланышын ачык сүрөттөйт.