首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >依赖传递依赖还是显式声明它们更好?

依赖传递依赖还是显式声明它们更好?
EN

Software Engineering用户
提问于 2016-06-02 18:03:02
回答 2查看 1.7K关注 0票数 16

我有一个这样的项目结构:

代码语言:javascript
复制
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将被测试以确保没有任何中断,因为它们是由不同的团队管理的。
EN

回答 2

Software Engineering用户

回答已采纳

发布于 2016-06-03 04:20:54

想象一下,如果另一个团队在不使用第三方库的情况下对其项目进行重构以完成同样的事情,并消除了它们的依赖,会发生什么情况。或者他们转到另一个第三方图书馆去做同样的事情。你的代码还能用吗?

如果是这样的话,您的代码只依赖于另一个项目,如果不是,您的代码也依赖于第三方库。

这两个项目都需要有相同版本的Third Party Dependency

这是一个强有力的指示,说明您的项目也直接依赖于第三方库。

票数 12
EN

Software Engineering用户

发布于 2016-06-02 22:17:56

这主要是基于意见,我认为,但我将投入我的2p无论如何。

我一直在问自己,我的代码需要多少知识才能做它应该做的事情呢?

如果我的代码只使用来自Other team's library的代码,那么我将只将Other team's library作为一个依赖项。

如果我的代码也使用了来自Third-party library的代码,那么我也将包括它。

假设我有来自My LibraryOther LibraryThird-party Library的以下类(我将使用Java作为示例代码)

代码语言:javascript
复制
package mylibrary;

import otherlibrary.Bar;

public class Foo {

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

Other Library

代码语言:javascript
复制
package otherlibrary;

import thirdparty.Baz;

public class Bar {

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

Third-party library

代码语言:javascript
复制
package thirdparty;

public class Baz {

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

因为我在Foo中的代码只依赖于来自otherlibrary的代码,这就是我要包含的所有内容,因为这是我所关心的。我不在乎otherlibrary.Bar#doBar怎么做它做什么,我只是想让它去做。

但是,如果我们将otherlibrary.Bar#doBar更改为接受Baz来执行某些操作,如

代码语言:javascript
复制
public void doBar(Baz baz) {
    baz.doBaz();
}

然后,我需要将mylibrary.Foo#doFoo更改为

代码语言:javascript
复制
public void doFoo() {
    Bar bar = new Bar();
    Baz baz = new Baz();

    bar.doBar(baz);
}

因为我现在感兴趣的是Bar#doBar将如何完成它的工作,而且我的代码需要了解Baz才能完成我想要做的事情,所以我需要明确说明我包含的库。

如果我的代码必须了解thirdparty库中的内容,那么我必须将它作为依赖项来包含。

虽然Bar的作者应该隐藏更多的细节,所以我不需要包含thirdparty库.

票数 17
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/320128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档