Inversion of Control (IoC) β€” это архитСктурная концСпция, которая Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ управлСния зависимостями ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΡ‚ самого ΠΊΠΎΠ΄Π° ΠΊ внСшнСй систСмС. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Ссли ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ зависит ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, ΠΎΠ½ сам создаёт ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ. Π’ IoC этот процСсс контролируСтся ΠΈΠ·Π²Π½Π΅, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ ΠΈ Π»Π΅Π³ΠΊΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΌΠΈ.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: допустим, Ρƒ вас Π΅ΡΡ‚ΡŒ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ зависит ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса для выполнСния своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π’ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ класс сам создаёт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ.

class Engine {
    public void start() {
        System.out.println("Engine started");
    }
}
 
class Car {
    private Engine engine;
 
    public Car() {
        // Класс Car сам создаСт Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ
        this.engine = new Engine();
    }
 
    public void drive() {
        engine.start();
        System.out.println("Car is moving");
    }
}
 
public class Main {
    public static void main(String[] args) {
        Car car = new Car();
        car.drive();
    }
}

Π‘ использованиСм IoC, созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Engine пСрСдаётся Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Car Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° созданиС своСй зависимости:

class Engine {
    public void start() {
        System.out.println("Engine started");
    }
}
 
class Car {
    private Engine engine;
 
    // Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ пСрСдаСтся Ρ‡Π΅Ρ€Π΅Π· конструктор (IoC)
    public Car(Engine engine) {
        this.engine = engine;
    }
 
    public void drive() {
        engine.start();
        System.out.println("Car is moving");
    }
}
 
public class Main {
    public static void main(String[] args) {
        // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ зависимостСй осущСствляСтся снаруТи
        Engine engine = new Engine();
        Car car = new Car(engine);
        car.drive();
    }
}

IoC ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ SOLID, особСнно ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ инвСрсии зависимостСй (Dependency Inversion Principle, DIP), согласно ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ высокоуровнСвыС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Оба Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций. Π’ контСкстС IoC это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ классы Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свои зависимости, Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· интСрфСйсы ΠΈΠ»ΠΈ внСшниС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ, тСстированиС ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ прилоТСния.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° IoC

  • ОслаблСниС связности ΠΊΠΎΠ΄Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ классы Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ свои зависимости Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΈΡ… связь с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ рСализациями ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ. Π­Ρ‚ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½Ρƒ зависимостСй Π±Π΅Π· измСнСния самого класса.
  • Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ тСстирования. IoC позволяСт Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ зависимости Π½Π° тСстовыС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, mock-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹), Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ процСсс ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ классы ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… нСзависимо ΠΎΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… зависимостСй.
  • Π›ΡƒΡ‡ΡˆΠ°Ρ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ. БистСма, построСнная Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ… IoC, Π»Π΅Π³Ρ‡Π΅ адаптируСтся ΠΊ измСнСниям ΠΈ Π½ΠΎΠ²Ρ‹ΠΌ трСбованиям. НовыС зависимости ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Π±Π΅Π· Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ измСнСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°.
  • Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ отвСтствСнности. Π‘ IoC создаётся Ρ‡Ρ‘Ρ‚ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ зависимостями. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ класса, Π½Π΅ ΠΎΡ‚Π²Π»Π΅ΠΊΠ°ΡΡΡŒ Π½Π° вопросы создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠœΠ΅Ρ‚Π° информация

ΠžΠ±Π»Π°ΡΡ‚ΡŒ:: 00 АрхитСктура ПО
Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ:: АрхитСктурная концСпция
Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ::
Автор::
Π‘ΠΎΠ·Π΄Π°Π½Π°:: 2023-10-26

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹

Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ