ホームページ > バックエンド開発 > C++ > 依存関係の注入は、ファクトリ メソッド内の多くの依存関係の問題をどのように解決できるでしょうか?

依存関係の注入は、ファクトリ メソッド内の多くの依存関係の問題をどのように解決できるでしょうか?

Barbara Streisand
リリース: 2025-01-21 01:21:38
オリジナル
644 人が閲覧しました

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

依存関係の注入と制御の反転を使用するファクトリ メソッド

質問:

ファクトリ メソッドがさまざまなオブジェクトを作成する場合、渡された多数の依存関係を処理する必要があります。

問題:

ファクトリーで switch case ステートメントを使用すると、コードの臭いがひどくなります。ファクトリ自体に依存関係が導入され、拡張が困難になります。

解決策: 依存性注入戦略パターン

インターフェース:

自動車工場と自動車戦略のインターフェースを定義して、自動車の作成を具体的な実装から切り離します。

<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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート