Подтвердить что ты не робот

Шаблон стратегии против инъекции зависимостей

Как шаблон стратегии отличается от инъекции зависимостей?

т.е. ниже, что вы можете сделать с шаблоном стратегии:

class Foo{
   private readonly ISortAlgo _sortAlgo;

  public Foo(ISortAlgo sortAlgo)
  {
     _sortAlgo = sortAlgo;
  }

  public void Sort()
  {
    _sortAlgo.sort();
  }

}

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

В плане реализации я не вижу большой разницы.

какая разница между шаблоном стратегии и DI?

4b9b3361

Ответ 1

Во-первых, инъекция зависимостей имеет не только инъекцию конструктора, но и свойство, инъекцию метода и окружающий контекст.

Во-вторых, stategy определяет поведение, поэтому клиент может выбрать специальный, который соответствует его потребностям. Хотя вложение зависимостей работает с абстракцией внешних зависимостей.

Ответ 2

Шаблон стратегии позволяет выбирать поведение объекта (то есть его алгоритмы) во время выполнения, где Включение зависимостей позволяет удалить жестко закодированные зависимости.

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

Ответ 3

Стратегия позволяет изменить поведение объекта. DI - это шаблон проектирования, который позволяет вам зависеть от абстракций.

Ответ 4

Dependency Injection - это шаблон, который поможет вам разделить логику строительной формы, которая отлично подходит для тестирования и расширяемости системы. Его также можно использовать на месте, где другие паттеры подходят, например. Singleton.

Стратегия стратегии решает другую проблему. Это позволяет времени выполнения выбирать алгоритм - в ООП через полиморфизм.

Конечно, они могут работать вместе.