ホームページ  >  記事  >  Java  >  Java の依存性反転の設計原則とは何ですか?

Java の依存性反転の設計原則とは何ですか?

PHPz
PHPz転載
2023-05-12 21:10:04844ブラウズ

依存関係反転の概要

フレームワークの開発プロセス中に、依存関係反転、依存関係反転、制御の反転、依存関係注入、IOC という用語をよく耳にします。原則。 依存関係逆転の原則 が関連しています。これらの用語を見てみましょう:

  • 制御の反転 (IOC)。これは基本的に Spring インタビューで行われることです質問しました。IOCの正式名称はInversion of Controllerです。IOCは必ずしもSpringの機能ではありません。SpringはIOCを利用した基本的なフレームワークです。簡単に理解すると、過去に単純な実装によってビジネスコードが重複して使用されていました。メソッドを変更する必要があると面倒です , パーミッションは開発者によって完全に制御されます いずれにしても、開発者はいくつかのデザインパターンを通じて、関係に基づいて開発することはありません. 実装すべき機能が実装されている限り、権限はプログラムによって制御されます;

  • 依存関係注入 (DI)、正式名は依存関係注入です。単純に理解すると、操作する必要があるオブジェクトはコンストラクターを通じて構築され、get /set、インターフェイス、および新しいオブジェクトは、渡された外部オブジェクトを通じて注入されます。これは依存関係の注入であり、Spring を使用する方が優れています。 のフレームワーク) 低レベルのモジュール (低レベル) に依存しないでください。高レベルのモジュールと低レベルのモジュールは、抽象化を通じて相互に依存する必要があります。さらに、抽象化は特定の実装の詳細に依存すべきではなく、特定の実装の詳細は抽象化に依存する必要があります

    ;
  • #モジュールの概念

高モジュールと低モジュールとは何を指すことが多いですか?描画時に関係を区別またはマークするにはどうすればよいですか;

簡単に言うと、呼び出しチェーンの Java の依存性反転の設計原則とは何ですか? では、呼び出し元は上位レベルに属し、呼び出し先は下位レベル ## に属します。 #。なぜそのような設計が使用されるのでしょうか? 根本的な原因は疎結合です。そうでない場合、高レベルのモジュールは低レベルのモジュールに強く結合され、高レベルのモジュールは基礎となるモジュールのコードの影響を受けません。実際のシナリオではこのルールに従うことが完全に必要ですか? ウールの布ですか?一般的な例を見てみましょう:

MVC アーキテクチャ: 一般的に使用されるメソッドは、Controller-->Service-->Dao です。Controller は Service の上位モジュールであり、Service もまた、Service の上位モジュールですDao. ですが、実際のビジネスシーンでは直接インジェクションで開発しますが、もちろん直接インジェクションを行わずインターフェース経由でオブジェクトを取得する場合もあり、作業コストが増加します。

そこで質問ですが、この原理を利用すると作業コストは増加するのでしょうか?私の理解では、モジュールも粒度で分割する必要があり、モジュール間の関係、コード間のキーの関係、基本的なフレームワーク設計の関係、ビジネスコードの関係に分割する必要があり、スケーラビリティを考慮する必要があります。拡張する方法ではありませんが、この原則を使用する必要はありません。

ハリウッド原則

ハリウッド原則は、「Don't call us, we'll call you」の略です。一般科学によると、ハリウッドでは、エンターテイメント会社に履歴書を提出した後、次のことができます。家に帰って待つだけです。舞台芸術会社はエンターテインメントプロジェクト全体を完全に管理しているため、俳優は会社の仕事を受動的に受け入れ、必要なときにのみパフォーマンスを完了することができます。これは依存関係逆転の原則と一致しており、すべての依存関係逆転の原則はハリウッド原則とも呼ばれます。

ハリウッド原則の具体的な実施形態は、テンプレート メソッド パターンです。すべてのコンポーネントは受動的であり、コンテナーがすべてのコンポーネントの初期化と呼び出しを担当します。これも基本的なフレームワークとして考慮すべき点であり、主に次のようなメリットがあります。 #シングルトンと抽象化の削減 ファクトリの依存関係を削減

#ビジネスとフレームワーク間の結合を削減

#ビジネス コンポーネントは再利用可能でプラグイン可能

  • Spring のフレームワークに依存

    IOC は Spring の機能であり、Spring フレームワークの機能を作っているという概念を明確にする必要があります。Spring フレームワークが作成したものではありません。 IOC。
  • Spring の IOC の役割は何ですか?いわゆる IOC とは、

    Spring IOC コンテナがオブジェクトのライフサイクルとオブジェクト間の関係を担当するというものです。

  • Spring IOC によって挿入されたオブジェクトは、次の方法で依存オブジェクトも提供します。コンストラクター インジェクション、スター メソッド インジェクション、インターフェイス インジェクション。

    コンストラクター インジェクション
  • コンストラクター インジェクションは、その名前が示すように、構築メソッドで依存オブジェクトのパラメーター リストを宣言することで、挿入されたオブジェクトがどの依存オブジェクトが必要かを外部に知らせることを意味します。コンストラクターインジェクションは比較的簡単で、構築を通じて構築が完了した後でも完全に使用できます。

    <code>TestBean(Test test){<br>      this.test = test;<br>}</code>

    setter メソッドの挿入

    JavaBean オブジェクトの場合、通常、getter メソッドと setter メソッドを通じてオブジェクトのプロパティにアクセスし、設定します。したがって、現在のオブジェクトは、依存するオブジェクトに対応する setter メソッドを提供するだけでよく、このメソッドを通じて、対応する依存オブジェクトを挿入されたオブジェクトに設定できます。コンストラクター インジェクションと比較すると、セッター インジェクションはより緩やかで柔軟です。いつでもインジェクションできます

    <code>public class TestBean {<br><br>    private Test test;<br><br>    public void setTestBean(Test test) {<br>        this.test = test;<br>    }<br>}</code>

    インターフェイス モード インジェクション

    インターフェイス モード インジェクションは、依存オブジェクトの実装が必要なため、より横暴です。一般に、基本的なフレームワークにはほとんど存在しませんが、ビジネス分野ではよく使用されます。

    アノテーションインジェクション

    現在、Spring の主流のインジェクション方法は主にアノテーションを通じて実装されており、これらはすべてメタアノテーション @Component に基づいており、@Component を使用して多くの派生アノテーションも生成されます。

    rree

以上がJava の依存性反転の設計原則とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。