Sobes.tech
Назад к вопросам
Senior
6

Расскажи про паттерн Dependency Inversion (последний принцип SOLID) и про композицию.

Компании, где спрашивали
Tangem

Ответ от нейросети

sobes.tech AI

Принцип Dependency Inversion (DIP) — это один из пяти принципов SOLID, который гласит:

  • Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций.
  • Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Это значит, что вместо того, чтобы напрямую создавать и использовать конкретные реализации, мы работаем через интерфейсы или абстрактные классы. Это повышает гибкость, облегчает тестирование и поддержку кода.

Пример на Go:

// Абстракция
type Notifier interface {
    Notify(message string)
}

// Конкретная реализация
type EmailNotifier struct {}
func (e EmailNotifier) Notify(message string) {
    fmt.Println("Email sent:", message)
}

// Модуль верхнего уровня
func SendAlert(n Notifier, msg string) {
    n.Notify(msg)
}

// Использование
email := EmailNotifier{}
SendAlert(email, "System down!")

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

Например, вместо того, чтобы создавать класс "Квадрат", наследующийся от "Прямоугольника", можно создать структуру, которая содержит поле с типом "Прямоугольник" и расширяет его функциональность.

Композиция часто используется вместе с DIP, чтобы внедрять зависимости через поля структур или параметры функций, а не через наследование.