раз)
                  
                  
                  Есть несколько условных юнитов, нужно реализовать ассоциацию этих юнитов с их alias с возможностьб получения как списка всех юнитов, так и получения отдельного юнита по его alias.
                  
                  
                  Паттерн ServiceLocator - анти паттерн, что можно использовать в таком случае?
                  
                  
                  В книгах пишут, инжектируйте правильно.
                  
                  
                  Но в таком случае что и куда нужно инжектировать, чтобы было верно?
                  
                  
                  
                  
                  
                  # units.py
                  
                  
                  class BaseUnit:
                  
                  
                   alias: "some-key-base"
                  
                  
                  
                  
                  
                   def __init__(self, context):
                  
                  
                    self.context = context
                  
                  
                  
                  
                  
                   def func(self):
                  
                  
                    pass
                  
                  
                  
                  
                  
                  class Unit1(BaseUnit):
                  
                  
                   alias: "some-key"
                  
                  
                   pass
                  
                  
                  
                  
                  
                  class Unit2(BaseUnit):
                  
                  
                   alias: "some-key-2"
                  
                  
                   pass
                  
                  
                  
                  
                  
                  # main.py
                  
                  
                  
                  
                  
                  unit_class: BaseUnit= UnitLocator("some-key") # ?
                  
                  
                  
                  
                  
                  unit = unit_class({"context": "example"})
                  
                  
                
Верно ли будет инжектировать UnitLocator в Unit.__init__ и хранить в UnitLocator'е не сами классы, а готовые экземпляры? В таком случае все юниты нужно будет создать где-то, и возможно сетить контекст в рантайме. Но сетить контекст в рантайме тоже глупо, ибо экземпляр создается в таком случае с недостаточными для его работы данными.
Обсуждают сегодня