Я намагаюся розібратися, коли використовувати реєстр DIC / IoC для налаштування мого програмного забезпечення та коли використовувати фабрики, а також міркування щодо будь-якого підходу.
Я використовую StructureMap як мій контейнер DI (DIC), який легко налаштувати за допомогою реєстрів. У DIC практично всі зареєстровані об'єкти є статичними в тому сенсі, що мені не потрібно змінювати / обмінювати будь-яку реалізацію / екземпляр під час виконання, коли DIC налаштований і вони налаштовані в DIC як одиночні кнопки. Однак, оскільки моє програмне забезпечення (SW) працює на різних пристроях, мені потрібно вибрати реєстр, що залежить від пристрою, залежно від пристрою, на якому працює мій SW, щоб відповідно налаштувати обладнання.
Оскільки побудова деяких моїх об'єктів вимагає читання у файлах конфігурації, я використовую фабрики для повернення цих екземплярів у DIC, щоб відокремити зчитування конфігурації від створення об’єкта. Я зареєстрував заводські геттери в DIC для відповідних типів плагінів.
Тепер у мене є тип плагіна IMotor
з конкретними типами Motor1
і Motor2
, які повинні бути оброблені на заводі. Зараз я вирішую, як налаштувати свій пристрій, є два способи:
- Я передаю інформацію про пристрій, на якому працює SW,
MotorFactory
і він повертає правильний двигун,Motor1
абоMotor2
. У цьому випадку логіка прийняття рішення знаходиться всередині Заводу. - Я налаштовую DIC відповідно до пристрою, на якому він працює, і створюю дві фабрики
Motor1Factory
іMotor2Factory
там, де одна створюєMotor1
та іншуMotor2
. У цьому випадку я мав би відрізняти записи реєстру дляIMotor
конкретних реєстрів пристроїв, які використовуютьMotor1Factory
абоMotor2Factory
.
Тепер моє запитання: який із цих двох методів є кращим і чому? Мені здається, перший випадок не є прямолінійним і перекрученим, оскільки я поширюю логіку, яка визначає, який тип інстанціювати в кодовій базі. Тоді як у другому випадку я фактично множу кількість заводів у своєму коді, оскільки мені знадобиться фабрика для (майже) кожного конкретного типу. Мені це стає ще більш заплутаним, коли до суміші додаються абстрактні фабрики.
Отже знову: Коли я повинен використовувати той чи інший метод? І що ще важливіше: які хороші показники для вирішення, яким шляхом йти?