종속성 주입과 제어 역전을 이용한 팩토리 메소드
질문:
팩토리 메소드가 다양한 객체를 생성할 때 전달된 많은 종속성을 처리해야 합니다.
문제:
공장에서 스위치 케이스 문을 사용하는 것은 나쁜 코드 냄새입니다. 이는 팩토리 자체에 종속성을 도입하고 확장을 어렵게 만듭니다.
해결책: 종속성 주입 전략 패턴
인터페이스:
자동차 제작과 구체적인 구현을 분리하기 위해 자동차 공장과 자동차 전략 인터페이스를 정의합니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!