推移的な依存関係に依存するか、明示的に宣言する方が良いでしょうか?


11

私はこのようなプロジェクト構造を持っています:

My Project
  - Other Team's Project
     -Third Party Dependency

My ProjectOther Team's Project機能する必要があり、両方My Projectと機能Other Team's Projectする必要Third Party Dependencyがあります。これらを管理するために、依存関係管理システムを使用しています。

設計の観点から、My Project推移的に依存する方が良いThird Party Dependencyでしょうか?それとも、両方のために優れているMy ProjectOther Team's Projectの両方に明示的に彼らが使用することを宣言しますかThird Party Dependency

他のいくつかのこと:

  • 両方のプロジェクトに同じバージョンのが必要ですThird Party Dependency
  • それらが異なるチームによって管理されているため、何も壊れないことを保証するためにテストされるOther Team's Project更新された場合は保証されませんMy Project

回答:


11

他のチームがプロジェクトをリファクタリングして、サードパーティのライブラリ使用せずに同じことを行い、依存関係を削除した場合はどうなるか想像してみてください。または、同じことをするために別のサードパーティライブラリに切り替えます。コードは引き続き機能しますか?

コードが他のプロジェクトにのみ依存する場合、コードはサードパーティのライブラリにも依存します。

両方のプロジェクトに同じバージョンのが必要ですThird Party Dependency

これは、プロジェクトがサードパーティのライブラリにも直接依存していることを示す強力な指標です。


16

これは主に意見に基づいていますが、とにかく2pを入力します。

私がいつもやってきたことは、自分のコードがそれがするべきことをするために必要な知識の最小量は何であるかを自問することです?

私のコードがからのコードのみを使用する場合、 依存関係としてOther team's libraryのみ含めますOther team's library

私のコードからのコード使用している場合はThird-party library、それも含めます。

のは、私から次のクラスを持っていたとしましょうMy LibraryOther LibraryThird-party Library(私は例のコードは、Javaを使用します)

package mylibrary;

import otherlibrary.Bar;

public class Foo {

    public void doFoo() {
        Bar bar = new Bar();
        bar.doBar();
    }
}

の中に Other Library

package otherlibrary;

import thirdparty.Baz;

public class Bar {

    public void doBar() {
        Baz baz = new Baz();
        baz.doSomething();
    }
}

の中に Third-party library

package thirdparty;

public class Baz {

    public void doBaz() {
        System.out.println("baz");
    }
}

私のコードはからのコードFooのみに依存しているため、私が関心をotherlibrary持っているのはそれだけです。私はotherlibrary.Bar#doBarそれが何をするにしても気にしません、ただそれをやりたいです。

ただし、次のように、何かをotherlibrary.Bar#doBarするためにa Bazを受け入れるように変更した場合

public void doBar(Baz baz) {
    baz.doBaz();
}

その後mylibrary.Foo#doFoo、次のようなものに変更する必要があります

public void doFoo() {
    Bar bar = new Bar();
    Baz baz = new Baz();

    bar.doBar(baz);
}

私は今、どのように興味を持っていますのでBar#doBar、そのことを行うために起こっている、と私のコードが必要と知ってBaz、私はそれが何をしたいのかやって、私は私には、ライブラリを明示する必要があります。

私のコードがライブラリ内の内容について知る必要がある場合、依存関係として含める必要があります。thirdparty

おそらく著者はBarこれらの詳細をもっと隠す必要があるので、thirdpartyライブラリを含める必要はありません...


1
私はこれですべてです。しかし、たとえば、thirdypartyバージョン4から始めてotherlibraryバージョン3が必要な場合、依存関係の地獄は常に問題になります。
チアゴアレイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.