> 백엔드 개발 > C++ > 종속성 주입은 종속성이 많은 팩토리 메서드 문제를 어떻게 해결할 수 있습니까?

종속성 주입은 종속성이 많은 팩토리 메서드 문제를 어떻게 해결할 수 있습니까?

Linda Hamilton
풀어 주다: 2025-01-21 01:16:11
원래의
300명이 탐색했습니다.

How Can Dependency Injection Solve Factory Method Challenges with Many Dependencies?

의존성 주입과 제어 역전을 이용한 팩토리 메소드

질문:

팩토리 메서드 패턴에 익숙하지만 팩토리 생성자에서 많은 수의 종속성을 관리하는 데 어려움을 겪고 있습니다. 콘크리트 자동차 클래스를 공장에 주입하려고 하지만 이는 공장 원칙을 위반합니다. 또한 서비스 로케이터는 안티 패턴으로 알려져 있으므로 사용하고 싶지 않습니다.

해결책:

이 시나리오에 가장 적합한 방법은 전략 모드입니다. 이 패턴을 사용하면 DI 컨테이너가 자신에 속한 팩토리 인스턴스에 종속성을 주입할 수 있으므로 서비스 로케이터를 사용하거나 종속성이 있는 다른 클래스를 복잡하게 만들 필요가 없습니다.

구현:

인터페이스:

<code>public interface ICarFactory
{
    ICar CreateCar();
    bool AppliesTo(Type type);
}

public interface ICarStrategy
{
    ICar CreateCar(Type type);
}</code>
로그인 후 복사

공장 :

<code>public class Car1Factory : ICarFactory
{
    private readonly IDep1 dep1;
    private readonly IDep2 dep2;
    private readonly IDep3 dep3;

    // ... 构造函数和实现
}

public class Car2Factory : ICarFactory
{
    private readonly IDep4 dep4;
    private readonly IDep5 dep5;
    private readonly IDep6 dep6;

    // ... 构造函数和实现
}</code>
로그인 후 복사

전략:

<code>public class CarStrategy : ICarStrategy
{
    private readonly ICarFactory[] carFactories;

    public CarStrategy(ICarFactory[] carFactories)
    {
        // ... 构造函数和实现
    }
}</code>
로그인 후 복사

사용법:

<code>var strategy = new CarStrategy(new ICarFactory[] {
    new Car1Factory(dep1, dep2, dep3),
    new Car2Factory(dep4, dep5, dep6)
});

var car1 = strategy.CreateCar(typeof(Car1));
var car2 = strategy.CreateCar(typeof(Car2));</code>
로그인 후 복사

장점:

  • 공장에서는 스위치 케이스 문을 사용하지 마세요.
  • 재설계 없이 추가 공장 추가를 지원합니다.
  • 각 공장에는 DI 컨테이너에 의해 주입된 자체 종속성이 있습니다.
  • 의존성 주입과 제어 역전의 원칙을 따릅니다.

위 내용은 종속성 주입은 종속성이 많은 팩토리 메서드 문제를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿