Паттерн стратегии против инъекции зависимости
Чем отличается паттерн стратегии от инъекции зависимостей?
То есть ниже то, что вы можете сделать с паттерном стратегии:
class Foo{
private readonly ISortAlgo _sortAlgo;
public Foo(ISortAlgo sortAlgo)
{
_sortAlgo = sortAlgo;
}
public void Sort()
{
_sortAlgo.sort();
}
}
С DI вы можете сделать то же самое, по существу у вас может быть конструктор, сеттер, интерфейс и т. д. инъекция. и это даст тот же эффект, что и стратегия паттерна. Я знаю, что DI-это также набор других принципов, таких как свободное соединение, тестируемость, проводка и т. д.
С точки зрения реализации я не вижу большой разницы.
Что s в чем разница между стратегией pattern и DI?
4 ответов:
Во-первых, инъекция зависимостей имеет не только инъекцию конструктора в качестве метода для инъекции, но и свойство, инъекция метода иокружающий контекст .
Во-вторых, stategy определяетповедение , поэтому клиент может выбрать специальное, соответствующее его потребностям. В то время как инъекция зависимостей работает с абстракцией внешних зависимостей.
Шаблон стратегии позволяет выбирать поведение объекта (т. е. его алгоритмы) во время выполнения, где в качествеинъекции зависимостей позволяет удалять жестко закодированные зависимости.
Таким образом, они не являются конкурентами. Их реализация может быть схожей, однако их цель различна.
Стратегия
Позволяет изменять поведение объекта. DI-это шаблон проектирования, который позволяет вам зависеть от абстракций.
Инъекция зависимостей-это шаблон, который поможет вам разделить логику построения, которая отлично подходит для тестирования и расширения системы. Он также может быть использован в месте, где другие скороговорки подходят, например, Синглтон.
Паттерн стратегии решает другую проблему. Это позволяет runtime выбирать алгоритм-в ООП через полиморфизм.
Конечно, они могут работать вместе.
Comments