소프트웨어를 구성하기 위해 DIC / IoC 레지스트리를 사용하는시기와 팩토리를 사용하는시기 및 두 가지 접근 방식의 추론을 파악하려고합니다.
구조 맵을 DI 컨테이너 (DIC)로 사용하고 있는데, 이는 레지스트리를 사용하여 쉽게 구성 할 수 있습니다. DIC에서 실제로 등록 된 모든 객체는 정적이므로 의미가 있습니다 .DIC가 구성되고 DIC에서 싱글 톤으로 구성되면 런타임에 구현 / 인스턴스를 변경 / 교환 할 필요가 없습니다. 그러나 소프트웨어 (SW)가 다른 장치 에서 실행되므로 하드웨어를 적절하게 구성하려면 SW가 실행되는 장치에 따라 장치 별 레지스트리를 선택 해야 합니다.
일부 객체를 구성하려면 구성 파일을 읽어야하므로 팩토리를 사용하여 이러한 인스턴스를 DIC에 반환하여 구성 읽기와 객체 작성을 분리합니다. 해당 플러그인 유형에 대해 팩토리 getter를 DIC에 등록했습니다.
지금은 플러그인 유형이 있다고 IMotor
콘크리트 종류 Motor1
및 Motor2
공장에 의해 처리되어야한다. 이제 장치 구성 방법을 결정할 수있는 두 가지 방법이 있습니다.
- 나는 SW가에 실행되고있는 장치에 대한 정보를 전달
MotorFactory
하고 올바른 모터를 반환하거나Motor1
또는Motor2
. 이 경우 결정 논리 는 공장 내부 에 있습니다. - 나는 그것을 실행하고 두 개의 공장을 생성하는 장치에 따라 DIC를 구성
Motor1Factory
하고Motor2Factory
하나가 생성하는 경우,Motor1
다른Motor2
. 이 경우 또는IMotor
중 하나를 사용하는 장치 별 레지스트리에 다른 레지스트리 항목 이 있습니다 .Motor1Factory
Motor2Factory
이제 내 질문은 :이 두 가지 방법 중 어느 것이 선호되고 왜? 필자는 코드베이스 전체에서 인스턴스화 할 유형을 결정하는 논리를 퍼 뜨리고 있기 때문에 첫 번째 경우는 간단하고 복잡하지 않은 것 같습니다. 두 번째 경우에는 코드의 팩토리 수를 효과적으로 곱하는 것입니다. 각 콘크리트 유형마다 (거의) 팩토리가 필요하기 때문입니다. 추상 팩토리가 믹스에 추가되면 더 혼란 스럽습니다.
다시 한 번 : 한 가지 방법을 사용해야합니까? 그리고 더 중요한 것은 : 어떤 길을 갈지를 결정하는 좋은 지표는 무엇입니까?