Member 14983007 Ответов: 0

Как выбрать лучший дизайн для достижения инъекции зависимостей


У меня есть несколько функций в моем основном методе для моего приложения python. Все эти функции выполняют различные задачи, вызывая различные классы в моей папке src. Приложения, использующие мой инструмент, определяют конфигурационный файл, который мой инструмент считывает и выполняет соответствующие задачи. До сих пор существует только один путь рабочего процесса для всех задач.
def task1(conf):
 # task1
     
def task2(conf):
 # task2

def main(args):
  args = parse_args(args)
  conf = get_conf(args.config_file)
  args.command(conf=conf)
    
def get_conf(config_file):
  # read the conf and get it as a class obj
    
if __name__ == "__main__":
  sys.exit(main(sys.argv[1:]))

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

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

Я ищу любые предложения о том, какой здесь может быть правильный подход. Есть ли лучшая альтернатива, которую я не рассматривал? Если у кого-то есть опыт использования библиотек DI в python, не могли бы вы поделиться своим опытом?

Что я уже пробовал:

Я использовал фабричный шаблон с наследованием.

Gerry Schmitz

Все, что уменьшает зависимость от сторонних библиотек, - это хорошо, ИМО.

0 Ответов