digital-garden/dev/architecture/Dependency Injection.md
Struchkov Mark 8eb3c4e62e
All checks were successful
continuous-integration/drone/push Build is passing
Архитектурная концепция.md
2024-10-01 08:50:07 +03:00

3.6 KiB
Raw Blame History

aliases tags date zero-link parents linked
DI
внедрение зависимостей
maturity/🌱
2023-10-26
../../meta/zero/00 Архитектура ПО
Inversion of Control
Паттерн программирования

Dependency Injection (DI) — это паттерн проектирования, который используется для реализации принципа Inversion of Control (IoC). DI позволяет передавать зависимости объектам извне, вместо того чтобы объекты сами создавали их. Это ослабляет связь между компонентами системы, что делает код более гибким и удобным для поддержки.

В Java DI часто используется через фреймворки, такие как ../../meta/zero/00 SpringBoot или ../../meta/zero/00 Quarkus, где зависимости внедряются автоматически. Основные способы внедрения зависимостей включают:

  • Внедрение через конструктор: зависимости передаются через параметры конструктора.
  • Внедрение через сеттеры: зависимости устанавливаются через методы.
  • Внедрение через поля: зависимости могут быть внедрены напрямую в поля класса с использованием аннотаций.

Пример внедрения через конструктор с использованием Spring:

import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Autowired;

@Component
class Engine {
    public void start() {
        System.out.println("Engine started");
    }
}

@Component
class Car {
    private final Engine engine;

    @Autowired
    public Car(Engine engine) {
        this.engine = engine;
    }

    public void drive() {
        engine.start();
        System.out.println("Car is moving");
    }
}

В этом примере Spring автоматически создаёт и инжектирует объект Engine в Car, благодаря аннотации @Autowired. Это упрощает управление зависимостями и позволяет легче изменять их без изменения логики программы.

Главные преимущества DI:

  • Лёгкость тестирования: можно подменять зависимости, что упрощает создание модульных тестов.
  • Масштабируемость: система легче адаптируется к изменениям.
  • Упрощение архитектуры: бизнес-логика отделена от процесса создания зависимостей.

Мета информация

Область:: ../../meta/zero/00 Архитектура ПО Родитель:: Inversion of Control, Паттерн программирования Источник:: Автор:: Создана:: 2023-10-06

Дополнительные материалы

Дочерние заметки