TGViewer
Frontend | Вопросы собесов Frontend | Вопросы собесов @easy_javascript_ru · 17.6K subscribers
Post #857 5.17K
🤔 Что такое di?

Это паттерн проектирования, который используется для управления зависимостями в программном обеспечении. Суть этого паттерна заключается в том, что объект получает свои зависимости извне, а не создаёт их сам. Это способствует более гибкому, легко тестируемому и поддерживаемому коду.

🚩Принципы

🟠Инверсия управления (Inversion of Control, IoC)
Принцип, согласно которому объект делегирует управление своими зависимостями внешнему источнику.

🟠Внедрение зависимостей (Dependency Injection)
Конкретная реализация инверсии управления, при которой зависимости передаются объекту через конструктор, методы или свойства.

🚩Способы внедрения зависимостей

🟠Внедрение через конструктор
Зависимости передаются объекту через параметры его конструктора. Пример на Java:
public class Service {
private final Repository repository;

public Service(Repository repository) {
this.repository = repository;
}

public void performAction() {
repository.doSomething();
}
}


🟠Внедрение через сеттеры
Зависимости передаются объекту через методы-сеттеры после его создания. Пример на Java:
public class Service {
private Repository repository;

public void setRepository(Repository repository) {
this.repository = repository;
}

public void performAction() {
repository.doSomething();
}
}


🟠Внедрение через интерфейсы
Зависимости передаются объекту через методы, определённые в интерфейсах. Пример на TypeScript:
interface IRepository {
doSomething(): void;
}

class Repository implements IRepository {
doSomething() {
console.log("Doing something...");
}
}

class Service {
private repository: IRepository;

constructor(repository: IRepository) {
this.repository = repository;
}

performAction() {
this.repository.doSomething();
}
}

const repository = new Repository();
const service = new Service(repository);
service.performAction();


🚩Плюсы

➕Улучшение тестируемости
Код становится более модульным и тестируемым, так как зависимости можно легко заменять на моки или стабы в тестах.

➕Улучшение поддерживаемости
Уменьшается связность кода, что упрощает его поддержку и модификацию.

➕Улучшение гибкости
Легче менять реализации зависимостей, не изменяя код, который их использует.

➕Явное указание зависимостей
Зависимости объектов становятся явными, что улучшает понимание кода.

🚩Минусы

➖Усложнение кода
Внедрение DI может усложнить код, особенно если используется слишком много уровней абстракции.
➖Кривая обучения
Понимание и правильное использование DI может потребовать времени и обучения, особенно для разработчиков, незнакомых с паттерном.
➖Перегрузка конструкции
При внедрении большого числа зависимостей через конструктор конструктор может стать перегруженным.

Ставь 👍 и забирай 📚 Базу знаний
  • 👍 9
  • ❤ 2
More from @easy_javascript_ru
  1. Oct 14, 2026🤔 Зачем создавались библиотеки react и другие? Библиотеки, такие как React, создавались д…
  2. Oct 13, 2026🤔 Что такое репозиторий? Это хранилище кода, файлов и их истории изменений. Используется…
  3. Oct 13, 2026🤔 Как мы можем замерить скорость работы участка кода с date.Now? В JavaScript можно замер…
  4. Oct 12, 2026🤔 Зачем нужен docker? Это инструмент для создания, развертывания и управления контейнерам…
  5. Oct 11, 2026🤔 Для чего нужен тег <noscript>? Он используется для отображения альтернативного контента…
  6. Oct 11, 2026🤔 Какими способами мы можем получить картинку с сервера? В веб-разработке есть разные спо…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →