Фабричный шаблон - это способ создания объекта на основе других зависимостей или логических выборов.
Метод Factory: «Определите интерфейс для создания объекта, но пусть классы, которые реализуют интерфейс, решают, какой класс создать экземпляр. Метод Factory позволяет классу отложить создание экземпляров для подклассов» (c) GoF.
Много конструкций .. отсюда и название Factory Pattern
Пример необработанного кода, который можно использовать с DI
public class ContextFactory : IContextFactory {
_anotherProcessor = anotherProcessor;
public ContextFactory(IAnotherProcessor anotherProcessor) {
//you can leverage DI here to get dependancies
}
public IContext Create(){
Context factoryCreatedContext = new Context();
factoryCreatedContext.SomethingProcessor = new SomethingProcessor(factoryCreatedContext )
factoryCreatedContext.AnotherProcessor = _anotherProcessor;
//You can even decide here to use other implementation based on some dependencies. Useful for things like feature flags.. etc.
return context;
}
}
.это может быть?- но здесь все еще существует проблема циклических ссылок, и я бы никогда не зафиксировал такой код.
Проблема здесь, вам нужно сконцентрироваться на Инверсия управления этого GetCommonData
Ваш SomethingProcessor
не должен полагаться на методы другого класса.Именно здесь Inheritance может использоваться, но Inheritance может стать очень сложной очень быстро.
Лучший путь вперед - это Определить одну вещь , которая нужна обоим или многим другим местам, и сломатьэто в новой зависимости.Вот как вы инвертируете контроль.
СОВЕТ:
Не переусердствуйте Интерфейсы - используйте интерфейсы, где вы думаете, что вы будете работать с полиморфизмом, например, набор различных объектов, которые должны обещать вам, что ониреализовали конкретный метод / свойство.В противном случае вы перешли на использование интерфейсов и увеличиваете сложность.DI не должен использовать интерфейсы, это может быть конкретная реализация.Интерфейсы в репозиториях - хорошее применение, так как вы можете легко переключать базы данных, но фабрики, подобные этим, на самом деле не нужны.