전이 의존성에 의존하거나 명시 적으로 선언하는 것이 낫습니까?


11

다음과 같은 프로젝트 구조가 있습니다.

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

My Project필요 Other Team's Project기능으로, 모두 My ProjectOther 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 Library, Other Library그리고 Third-party Library(나는 예제 코드 자바를 사용합니다)

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로 시작하고 버전 3이 otherlibrary필요한 경우 항상 문제가됩니다 .
Thiago Arrais
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.