Я пытаюсь выяснить, когда использовать реестр DIC / IoC для настройки моего программного обеспечения и когда использовать фабрики, а также обосновать любой из этих подходов.
Я использую StructureMap в качестве моего DI-контейнера (DIC), который легко настроить с помощью реестров. В DIC практически все зарегистрированные объекты являются статическими в том смысле, что мне не нужно изменять / обменивать какую-либо реализацию / экземпляр во время выполнения, после того, как DIC настроен, и они настроены в DIC как одиночные пакеты. Однако, поскольку мое программное обеспечение (ПО) будет работать на разных устройствах, мне нужно выбрать реестр для конкретного устройства в зависимости от устройства, на котором работает мое ПО, чтобы соответствующим образом настроить оборудование.
Поскольку построение некоторых моих объектов требует чтения в файлах конфигурации, я использую фабрики для возврата этих экземпляров в DIC, чтобы отделить чтение конфигурации от создания объекта. Я зарегистрировал заводские геттеры в DIC для соответствующих типов плагинов.
Теперь скажите, что у меня есть тип плагина IMotor
с конкретными типами Motor1
и Motor2
который должен обрабатываться на заводе. Теперь есть два способа решить, как настроить мое устройство:
- Я передаю информацию об устройстве , что SW работает на к
MotorFactory
и возвращает соответствующий двигатель, либоMotor1
илиMotor2
. В этом случае логика принятия решения находится внутри Фабрики. - Я настраиваю DIC в соответствии с устройством, на котором он работает, и создаю две фабрики
Motor1Factory
иMotor2Factory
, где одна создает,Motor1
а другаяMotor2
. В этом случае я бы отличаясь записи реестра дляIMotor
в устройства специальных реестрах , которые используют либоMotor1Factory
илиMotor2Factory
.
Теперь мой вопрос: какой из этих двух методов предпочтительнее и почему? Мне кажется, что первый случай не является прямым и запутанным, так как я распространяю логику, которая решает, какой тип создавать в базе кода. Тогда как во втором случае я эффективно умножаю количество фабрик в моем коде, так как мне понадобится фабрика для (почти) каждого конкретного типа. Это становится еще более запутанным для меня, когда к смеси добавляются абстрактные фабрики.
Итак, еще раз: когда я должен использовать один метод или другой? И что еще более важно: каковы хорошие показатели для принятия решения, по какому пути идти?