制御の反転は、オブジェクト指向プログラミングにおける設計原則です。これは、コンピュータ コード間の結合を減らすために使用できます。また、制御の反転を使用して、オブジェクトがコントローラによって制御されるようにすることもできます。システム内のすべてのオブジェクトの外部エンティティは、依存するオブジェクトへの参照を渡します。
制御の反転 (IoC) は、コンピューター コード間のエラーの数を減らすために使用できるオブジェクト指向プログラミングの設計原則です。 。最も一般的な方法は依存関係注入 (DI) と呼ばれ、もう 1 つの方法は依存関係ルックアップと呼ばれます。制御の反転により、オブジェクトが作成されると、システム内のすべてのオブジェクトを制御する外部エンティティが、依存するオブジェクトの参照をそれに渡します。依存関係がオブジェクトに注入されるとも言えます。
制御の反転実装戦略
IoC は、さまざまな方法で実装できる大きな概念です。主な形式は 2 つあります。
依存関係ルックアップ: コンテナはコールバック インターフェイスとコンテキスト条件をコンポーネントに提供します。 EJB と Apache Avalon は両方ともこのアプローチを使用します。このように、コンポーネントは、リソースと協調オブジェクトを見つけるためにコンテナによって提供される API を使用する必要があります。制御の唯一の反転は、これらのコールバック メソッド (つまり、上記のタイプ 1) にのみ反映されます。コンテナはこれらのコールバック メソッドを呼び出します。 , これにより、アプリケーション コードが関連リソースを取得できるようになります。
依存関係の挿入: コンポーネントは位置決めクエリを実行せず、コンテナが依存関係を判断するための通常の Java メソッドを提供するだけです。コンテナはコンポーネントのアセンブリのみを担当し、依存関係を満たすオブジェクトを JavaBean プロパティまたはコンストラクタを通じて必要なオブジェクトに渡します。 JavaBean プロパティを通じて依存関係を注入する方法は Setter Injection と呼ばれ、依存関係をコンストラクター パラメーターとして渡す方法は Constructor Injection と呼ばれます。
#反応を制御する 実装メソッドに転送する
#データ アクセス レイヤーの実装データ アクセス レイヤーには 2 つの目標があります。 1 つ目は、アプリケーションからデータベース エンジンを抽象化して、データベースをいつでも変更できるようにすることです (たとえば、Microsoft SQL から Oracle へ)。ただし、これが実際に行われることはほとんどなく、データ アクセス層を使用して既存のアプリケーションを再構築する十分な理由も能力もありません。 2 番目の目標は、データベース実装からデータ モデルを抽象化することです。これにより、メイン アプリケーションのごく一部 (データ アクセス層) にのみ影響を与えながら、必要に応じてデータベースやコードを変更できます。この目標は、既存のシステムで達成するために必要なリファクタリングを行う価値があります。 モジュールとインターフェイスのリファクタリング依存関係の挿入の背後にある中心的な考え方の 1 つは、単一責任の原則です。この原則は、すべてのオブジェクトには特定の目的があるべきであり、その目的を利用する必要があるアプリケーションのさまざまな部分では適切なオブジェクトを使用する必要があると述べています。これは、これらのオブジェクトをシステム内のどこでも再利用できることを意味します。しかし、これは多くの既存システムには当てはまりません。 いつでも単体テストを追加関数をオブジェクト全体にカプセル化すると、自動テストが困難または不可能になります。この方法でリファクタリングすると、モジュールとインターフェイスを特定のオブジェクトから分離することで、より高度な単体テストが可能になります。後でテストを追加するという考えでモジュールのリファクタリングを続けたくなりますが、これは間違いです。 コンストラクター インジェクションの代わりにサービス ロケーターを使用する制御の反転を実現する方法は複数あります。最も一般的なアプローチはコンストラクター インジェクションを使用することです。これには、オブジェクトの最初の作成時にすべてのソフトウェア依存関係が提供される必要があります。ただし、コンストラクターの注入では、システム全体がこのパターンを使用することが前提となっているため、システム全体を同時にリファクタリングする必要があります。それは難しく、リスクがあり、時間がかかります。 推奨チュートリアル:「PHP」
以上が制御の反転とはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。