Frage:
Sie sind mit dem Factory-Methodenmuster vertraut, stehen jedoch vor Herausforderungen bei der Verwaltung einer großen Anzahl von Abhängigkeiten im Factory-Konstruktor. Sie versuchen, eine konkrete Autoklasse in die Fabrik einzuführen, aber das verstößt gegen das Fabrikprinzip. Sie sollten den Service Locator auch nicht verwenden, da er als Anti-Pattern bekannt ist.
Lösung:
Die am besten geeignete Methode für dieses Szenario ist der Strategiemodus. Dieses Muster ermöglicht es Ihren DI-Containern, Abhängigkeiten in die ihnen gehörenden Factory-Instanzen einzufügen, wodurch die Notwendigkeit entfällt, Service-Locators zu verwenden oder andere Klassen mit Abhängigkeiten zu überladen.
Schnittstelle:
<code>public interface ICarFactory { ICar CreateCar(); bool AppliesTo(Type type); } public interface ICarStrategy { ICar CreateCar(Type type); }</code>
Fabrik:
<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>
Strategie:
<code>public class CarStrategy : ICarStrategy { private readonly ICarFactory[] carFactories; public CarStrategy(ICarFactory[] carFactories) { // ... 构造函数和实现 } }</code>
Verwendung:
<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>
Vorteile:
Das obige ist der detaillierte Inhalt vonWie kann die Abhängigkeitsinjektion die Herausforderungen von Factory-Methoden mit vielen Abhängigkeiten lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!