ホームページ Java &#&チュートリアル 制御の反転と依存関係の注入の違いは何ですか?

制御の反転と依存関係の注入の違いは何ですか?

Apr 24, 2019 pm 02:44 PM
依存性注入 制御の反転

制御の反転と依存性の注入の違いは次のとおりです: 依存性の注入はアプリケーションの観点から説明されるのに対し、制御の反転はコンテナの観点から説明されます。制御の反転は原則に焦点を当てますが、依存性はインジェクションは実装に重点を置いています。

制御の反転と依存関係の注入の違いは何ですか?

#【おすすめコース: Java チュートリアル #】

制御の反転と依存関係の注入の違い

IOC 制御の反転 制御の反転

DI 依存関係の注入依存関係の注入

要件 これら 2 つの概念を理解するには、まず次の質問を明確にする必要があります。

参加者は誰ですか?

依存: 誰が誰に依存しているのか?なぜ依存関係が必要なのでしょうか?

注射: 誰が誰に注射するのか?いったい何が注入されるのでしょうか?

制御の反転: 誰が誰を制御するのか?何を制御しますか?なぜそれを反転と呼ぶのでしょうか (反転がある場合は順方向反転があるはずです)。

依存関係の注入と制御の反転は同じ概念ですか?

上記の疑問に簡単に答えてみましょう。これらの疑問が理解できれば、IOC/DI についても理解できるようになります。

(1) 参加者:

通常、3 つの関係者が存在し、1 つは特定のオブジェクト、1 つは IOC/DI コンテナ、もう 1 つは Anオブジェクトの外部リソース。

#オブジェクトとは、通常の Java オブジェクトを指します。

IOC/DI コンテナは、単に IOC/DI 関数の実装に使用されるフレームワーク プログラムを指します。

IOC/DI コンテナの外部リソースオブジェクトとは、オブジェクトが必要とするものを指しますが、これらはオブジェクトの外部から取得されるもので、オブジェクトが必要とする他のオブジェクト、オブジェクトが必要とするファイル リソースなどを総称してリソースと呼びます。

(2) 誰が誰に依存するか:

もちろん、特定のオブジェクトは IOC/DI コンテナに依存します

(3 ) 依存関係が必要な理由:

オブジェクトは、オブジェクトに必要な外部リソースを提供するために IOC/DI コンテナを必要とします

(4) 誰が誰に注入するか:

#IOC/DI コンテナがオブジェクトを注入することは明らかです

##(5) 注入される内容:

##以上です オブジェクトに必要な外部リソースを注入します

(6) 誰が誰を制御するか:


もちろん、それはオブジェクトを制御するIOC/DIコンテナ
(7) 制御内容:

主にオブジェクトインスタンスの作成を制御します

(8) なぜそれがリバースターンと呼ばれるのか:


リバースは正の方向に相対的なものなので、何が正とみなされるのでしょうか?通常の状況でのアプリケーションを考えてみましょう。A の中で C を使用したい場合、どうしますか?もちろん、C のオブジェクトは直接作成されます。つまり、必要な外部リソース C がクラス A で能動的に取得されます。この状況を順方向と呼びます。では、逆とは何でしょうか?つまり、クラス A は積極的に C を取得するのではなく、IOC/DI コンテナが C のインスタンスを取得するのを受動的に待ち、それを逆にクラス A に注入します。
図を使って説明します。まず、図に示すように、IOC/DI がない場合にクラス C を使用する従来のクラス A の回路図を見てみましょう。


##IOC/DI コンテナがある場合、図


に示すように、クラス A は C を積極的に作成しなくなります。受動的に待機し、IOC/DI コンテナが C のインスタンスを取得するのを待ち、図に示すようにそれをクラス A に逆注入します。 (9) 依存関係の注入と制御の反転は同じ概念ですか? 制御の反転と依存関係の注入の違いは何ですか?

上記の説明によると、依存性注入と制御の反転は、同じものを別の角度から説明したものであることがわかります。依存関係の注入はアプリケーションの観点から説明されています。完全な説明は次のとおりです: アプリケーションは必要な外部リソースの作成と注入をコンテナに依存しますが、制御の反転はコンテナの観点から説明されています。完全な説明は次のとおりです:コンテナはアプリケーションを制御し、アプリケーションが必要とする外部リソースをアプリケーションに逆に注入します。

制御の反転と依存関係の注入の違いは何ですか?要約:

実際、IOC/DI がプログラミングにもたらす最大の変化は、コードによるものではなく、思考の観点からのものです。スレーブ転置」という変化が発生しました。アプリケーションは本来、ボスであり、率先してリソースを取得しますが、IOC/DI の考え方では、アプリケーションは受動的になり、IOC/DI コンテナが必要なリソースを作成して注入するのを受動的に待ちます。このような小さな変更は、実際にはプログラミングの考え方における大きな進歩であり、オブジェクトとそれに必要な外部リソースを効果的に分離し、それらを疎結合にし、機能の再利用を促進し、さらに重要なことに、プログラムのシステム全体の構造を非常に大きくします。フレキシブル###

以上が制御の反転と依存関係の注入の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Angular での依存関係の挿入を理解するためのステップバイステップ ガイド Angular での依存関係の挿入を理解するためのステップバイステップ ガイド Dec 02, 2022 pm 09:14 PM

この記事では、依存性注入について説明し、依存性注入によって解決される問題とそのネイティブの記述方法を紹介し、Angular の依存性注入フレームワークについて説明します。

Phalconフレームワークで依存関係注入(Dependency Injection)を使用する方法 Phalconフレームワークで依存関係注入(Dependency Injection)を使用する方法 Jul 30, 2023 pm 09:03 PM

Phalcon フレームワークで依存関係注入 (DependencyInjection) を使用する方法の紹介: 現代のソフトウェア開発では、依存関係注入 (DependencyInjection) は、コードの保守性とテスト容易性を向上させることを目的とした一般的な設計パターンです。高速かつ低コストの PHP フレームワークである Phalcon フレームワークは、アプリケーションの依存関係を管理および整理するための依存関係注入の使用もサポートしています。この記事では、Phalcon フレームワークの使用方法を紹介します。

Golang 関数パラメータ渡しにおける依存性注入パターン Golang 関数パラメータ渡しにおける依存性注入パターン Apr 14, 2024 am 10:15 AM

Go では、依存関係注入 (DI) モードは、値の受け渡しやポインターの受け渡しなど、関数パラメーターの受け渡しを通じて実装されます。 DI パターンでは、依存関係は通常、分離を改善し、ロック競合を軽減し、テスト容易性をサポートするためにポインターとして渡されます。ポインターを使用すると、関数はインターフェイスの種類にのみ依存するため、具体的な実装から切り離されます。また、ポインターの受け渡しにより、大きなオブジェクトを渡す際のオーバーヘッドが削減されるため、ロックの競合が軽減されます。さらに、DI パターンでは依存関係を簡単にモックできるため、DI パターンを使用した関数の単体テストを簡単に作成できます。

JUnit 単体テスト フレームワークを使用した依存関係の注入 JUnit 単体テスト フレームワークを使用した依存関係の注入 Apr 19, 2024 am 08:42 AM

JUnit を使用した依存関係注入のテストの概要は次のとおりです。 モック オブジェクトを使用して依存関係を作成します。 @Mock アノテーションを使用して、依存関係のモック オブジェクトを作成できます。テスト データの設定: @Before メソッドは各テスト メソッドの前に実行され、テスト データの設定に使用されます。モックの動作を構成する: Mockito.when() メソッドは、モック オブジェクトの予期される動作を構成します。結果の検証:assertEquals() は、実際の結果が期待値と一致するかどうかを確認するためにアサートします。実際の応用: 依存関係注入フレームワーク (Spring Framework など) を使用して依存関係を注入し、JUnit 単体テストを通じて注入の正確さとコードの正常な動作を検証できます。

Go 言語における制御の反転についての深い理解 Go 言語における制御の反転についての深い理解 Apr 08, 2024 am 08:51 AM

Inversion of Control (IoC) は、オブジェクトの依存関係をハードコーディングされた結合に分離するソフトウェア設計パターンです。 Go では、IoC はインターフェイスと依存関係注入 (DI) を通じて実現できます。 インターフェイス: インターフェイスに続く型が実装する必要があるメソッドのセットを定義します。依存関係の挿入: 外部構成またはコード生成により、オブジェクトの依存関係が設定されます。ヒントは次のとおりです。 コンストラクター インジェクション: コンストラクターでの依存関係の指定。フィールド注入: リフレクションまたはコード生成を使用して依存関係をフィールドに注入します。インターフェイス インジェクション: インターフェイス タイプをパラメータとして関数またはメソッドに渡します。

PHP 関数の依存関係注入とサービス コンテナー PHP 関数の依存関係注入とサービス コンテナー Apr 27, 2024 pm 01:39 PM

回答: PHP の依存関係インジェクションとサービス コンテナーは、依存関係を柔軟に管理し、コードのテスト容易性を向上させるのに役立ちます。依存関係の注入: 依存関係をコンテナー経由で渡し、関数内での直接作成を回避し、柔軟性を向上させます。サービスコンテナ: プログラム内で簡単にアクセスできるように依存関係インスタンスを保存し、疎結合をさらに強化します。実際のケース: サンプル アプリケーションは、依存関係の注入とサービス コンテナーの実際のアプリケーションを示し、疎結合の利点を反映してコントローラーに依存関係を注入します。

Go 言語: 依存性注入ガイド Go 言語: 依存性注入ガイド Apr 07, 2024 pm 12:33 PM

回答: Go 言語では、インターフェイスと構造を通じて依存関係の注入を実装できます。依存関係の動作を記述するインターフェイスを定義します。このインターフェースを実装する構造体を作成します。インターフェイスを介して関数のパラメーターとして依存関係を注入します。テストやさまざまなシナリオで依存関係を簡単に置き換えることができます。

Golang の単体テストに依存関係注入を使用するにはどうすればよいですか? Golang の単体テストに依存関係注入を使用するにはどうすればよいですか? Jun 02, 2024 pm 08:41 PM

Golang 単体テストで依存関係注入 (DI) を使用すると、テスト対象のコードを分離でき、テストのセットアップとメンテナンスが簡素化されます。一般的な DI ライブラリには、テスト用の依存関係スタブまたはモックを生成できる Wire および go-inject が含まれます。 DI テストの手順には、依存関係の設定、テスト ケースのセットアップ、結果のアサートが含まれます。 DI を使用して HTTP リクエスト処理関数をテストする例は、実際の依存関係や通信を行わずにコードを分離してテストすることがいかに簡単であるかを示しています。

See all articles