Sobes.tech
Middle
187

Басқару инверсиясы (Inversion of Control) дегеніміз не?

AI-дан жауап

sobes.tech AI

Басқару инверсиясы (IoC) — бұл бағдарламаның ағынын басқару сыртқы құрылымға, әдетте, фреймворк контейнеріне тапсырылатын жобалау принципі, ол тәуелділіктерді тікелей кодта алудың орнына.

Негізгі ұғымдар:

  • Тапсыру: Объект өз тәуелділіктерін жасамайды немесе іздемейді, оларды сырттан алады.
  • Контейнер: Әдетте, IoC арнайы контейнер арқылы жүзеге асырылады (мысалы, Spring ApplicationContext, Guice Injector), ол объектілердің өмірлік циклін басқарады және тәуелділіктерді шешеді.
  • Қатынассыздықты азайту: Объектілер басқа объектілердің нақты жүзеге асырылуына тәуелділігін азайтады.
  • Тестілеу мүмкіндігі: Тестілеуді жеңілдетеді, себебі тәуелділіктер үшін mock-объектілерді оңай қоюға болады.
  • Кеңейтілімділік: Тәуелділіктердің жаңа жүзеге асырылымдарын енгізу кодты өзгертусіз оңайырақ.

IoC-ті жүзеге асырудың кең тараған тәсілдері:

  • Service Locator: Объект тәуелділіктерді Service Locator-ден сұрайды.
  • Dependency Injection (DI): Ең кең тараған әдіс. Тәуелділіктер объектіге "сырттан" беріледі.

Тәуелділіктерді енгізудің мысалдары (DI):

  • Конструктор арқылы енгізу (Constructor Injection):

    // Тәуелділік конструктор арқылы беріледі
    public class MyClass {
        private final Dependency dependency;
    
        public MyClass(Dependency dependency) {
            this.dependency = dependency;
        }
    }
    
  • Сеттер арқылы енгізу (Setter Injection):

    // Тәуелділік әдіс-сеттер арқылы беріледі
    public class MyClass {
        private Dependency dependency;
    
        public void setDependency(Dependency dependency) {
            this.dependency = dependency;
        }
    }
    
  • Өріс арқылы енгізу (Field Injection):

    // Тәуелділік тікелей өріске енгізіледі (жиі аннотациялармен)
    public class MyClass {
        @Autowired // Spring аннотациясының мысалы
        private Dependency dependency;
    }
    

IoC, әсіресе DI түрінде, көптеген заманауи фреймворктердің (Spring, Quarkus) негізі болып табылады және әлсіз байланысты, модульдік және тестіленетін қосымшаларды жасауға ықпал етеді.