1

重複の可能性:
依存性注入はどの程度正確に結合を減らしますか?

概念としての依存性注入は、緩い結合をカプセル化していると思います。緩い結合を達成するのに役立つと言うのは正しいですか?私が理解していることから、緩い結合を持つクラスを設計した場合は、そのクラスにDIを実装できます。私が間違っている場合は、私を理解して修正するのを手伝ってください。

4

3 に答える 3

3

疎結合は本質的に DI とは何の関係もないと思います。必要に応じて、完全に密結合しているプロジェクトで DI を使用できます。

疎結合とは、あるコンポーネントを別のコンポーネントの実装の詳細から分離することです。これは通常、具体的なクラスではなく、インターフェースのインスタンスとしてコラボレーターを提供することにより、Java で実現されます。

私が言いたいのは、DI は多くの状況で人々を疎結合コードに導く傾向があるということですが、それを強制するものではありません (ただし、Spring のような一部の製品では、インターフェイスを使用しないことには多くの欠点があります)。コンテナーは、疎結合された共同作業者の配線もサポートしています。この例は、密結合されている間、DI コンテナーで完全に問題ありません。

public class FooService { ... }

public class SomeOtherService {
     public SomeOtherService(FooService fooService) {
          this.fooService = fooService;
     }
}

ただし、「SomeOtherService」がインターフェイスに関連付けられているため、これは疎結合です。

public interface FooService { ... }

public class SomeOtherService {
     public SomeOtherService(FooService fooService) {
          this.fooService = fooService;
     }
}

好みの配線メカニズム (guice、Spring 注釈、Spring xml、Java CDI) を挿入しますが、概念は同じです。

ウィキペディアには、疎結合に関する優れた記事があります。

http://en.wikipedia.org/wiki/Loose_coupling

于 2012-10-09T20:42:32.373 に答える
3

@maba が提案したように、このサイトには多くの関連資料があります。

とにかく:はい、あなたは正しいです。いつでも独自に DI を実装できますが、一般的には複雑すぎるタスクです。シンプルに保ちたい場合は、「依存関係を運ぶ」問題やその他多くの問題に遭遇するためです。

Guice、Spring、Pico を簡単に見てみましょう ;-) これらはすべて十分にテストされ、完全に機能します。幸運を。

于 2012-10-09T11:21:59.067 に答える
0

はい、DI は疎結合を実現するのに役立ちます。これは、コンポーネントまたはサービスのオブジェクトが必要な場所ならどこでも、そのスーパー インターフェイスのタイプによって自動配線できるためです。アプリケーションコンテキストファイルで指定するクラスのタイプ、または @Component、@Service、または @Reposirory で注釈を付けるクラスに応じて、注入される実際のオブジェクトのタイプは実行時に決定されます。

于 2012-10-09T13:35:38.313 に答える