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

의존성 주입은 팩토리 메소드의 많은 의존성 문제를 어떻게 해결할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-21 01:21:38673검색

How Can Dependency Injection Solve the Problem of Many Dependencies in a Factory Method?

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

질문:

팩토리 메소드가 다양한 객체를 생성할 때 전달된 많은 종속성을 처리해야 합니다.

문제:

공장에서 스위치 케이스 문을 사용하는 것은 나쁜 코드 냄새입니다. 이는 팩토리 자체에 종속성을 도입하고 확장을 어렵게 만듭니다.

해결책: 종속성 주입 전략 패턴

인터페이스:

자동차 제작과 구체적인 구현을 분리하기 위해 자동차 공장과 자동차 전략 인터페이스를 정의합니다.

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

public interface ICarStrategy
{
    ICar CreateCar(Type type);
}</code>

공장 :

차량 유형별로 별도의 팩토리를 구현합니다. 이러한 팩토리의 종속성은 DI 컨테이너에 의해 주입됩니다.

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

    // ... (构造函数和工厂方法)
}</code>

전략:

자동차 전략 수업에서는 공장 인터페이스를 사용하여 입력 유형에 따라 자동차를 만듭니다.

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

    // ... (构造函数和策略方法)
}</code>

사용법:

컴포지션 루트에서 팩토리 클래스에 적절한 종속성을 주입하고 자동차 전략을 만듭니다. 이 전략을 사용하여 원하는 자동차 유형을 만드세요.

<code>var strategy = new CarStrategy(new ICarFactory[] {
    new Car1Factory(dep1, dep2, dep3),
    // ...
});

var car1 = strategy.CreateCar(typeof(Car1));</code>

장점:

  • 자동차 생성과 종속성 주입을 분리합니다.
  • 전략을 변경하지 않고도 자동차 유형을 쉽게 추가하고 제거할 수 있습니다.
  • 테스트 가능성과 유연성이 향상되었습니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.