Questions tagged «dependencies»

依赖关系是一个广泛的软件工程术语,用于指代某个软件何时依赖另一个软件。在您的代码或软件可以运行之前,必须满足或安装的要求和先决条件。

7
我应该使用依赖注入还是静态工厂?
在设计系统时,我经常面临使其他模块使用大量模块(日志记录,数据库访问等)的问题。问题是,如何将这些组件提供给其他组件。似乎有两个答案可能是依赖注入或使用工厂模式。但是,两者似乎都错了: 工厂使测试变得痛苦,并且不允许轻易交换实现。它们也不会使依赖关系变得明显(例如,您正在检查一个方法,而忽略了它调用的方法会调用使用数据库的方法的事实)。 Dependecy注入使构造函数的参数列表大量膨胀,并且在代码的所有部分涂上了污点。典型情况是一半以上类的构造函数如下所示(....., LoggingProvider l, DbSessionProvider db, ExceptionFactory d, UserSession sess, Descriptions d) 这是我遇到的一个典型情况:我有异常类,这些异常类使用从用户数据库中加载的错误描述,并使用在用户会话对象中具有用户语言设置参数的查询。因此,要创建一个新的异常,我需要一个描述,它需要一个数据库会话和一个用户会话。因此,我注定要在所有方法中拖动所有这些对象,以防万一我可能需要引发异常。 我该如何解决这个问题?

6
如何应对依赖依赖的恐惧
我所在的团队创建了可供公司合作伙伴用来与我们的平台集成的组件。 因此,我同意在引入(第三方)依赖项时应格外小心。当前,我们没有第三方依赖项,我们必须保持框架的最低API级别。 一些例子: 我们被迫停留在框架的最低API级别(.NET标准)上。其背后的原因是,有一天可能会出现一个仅支持非常低的API级别的新平台。 我们已经实现了自己的用于(反)序列化JSON的组件,并且正在对JWT进行同样的处理。在更高级别的框架API上可用。 我们已经围绕标准库的HTTP框架实现了包装器,因为我们不想依赖于标准库的HTTP实现。 同样,出于同样的原因,所有用于映射到XML或从XML映射的代码都是“手工”编写的。 我觉得我们走得太远了。我想知道如何处理这个问题,因为这会极大影响我们的速度。

6
何时应更新依赖项?
我们有两个与依赖关系有关的主要危机,它们具有两个不同的代码库(Android和一个Node.js Web应用程序)。Android存储库需要从Flurry迁移到Firebase,这需要将Google Play服务库更新为四个主要版本。我们在Heroku托管的Node应用程序中发生了类似的事情,在该应用程序中,我们的生产堆栈(cedar)已被弃用,需要升级到cedar-14。我们的PostgreSQL数据库也需要从9.2更新到9.6。 这些应用程序的每个依赖项都已经存在了将近两年的时间,而当其中的一些应用程序被弃用并且我们进入“日落”时期时,更新或替换它们一直是头疼的大问题。在过去的一个月中,我花了30多个小时来慢慢解决所有冲突和代码损坏。 显然,让事情搁置两年已经太久了。技术发展日新月异,特别是当您使用Heroku等平台提供商时。假设我们有一个完善的测试套件,以及一个像Travis CI这样的CI流程,它不需要进行很多更新工作。例如,如果某个功能在升级后被删除,而您正在使用它,则测试将失败。 应该多长时间更新一次依赖关系,或者何时应该更新依赖关系?我们进行了更新,因为我们被迫这样做,但似乎某种先发制人的方法会更好。发行次要版本时,我们应该更新吗?主要版本?每个月是否有更新?我想不惜一切代价避免发生我刚刚经历的情况。 PS-对于我的一个个人Rails项目,我使用了一项名为Gemnasium的服务,该服务可以跟踪您的依赖关系,以便可以将安全漏洞通知给您。这是一项很棒的服务,但是我们必须手动检查我提到的项目的依赖关系。

6
将“一堆东西”实用程序项目分离为具有“可选”依赖项的各个组件
在使用C#/。NET进行一系列内部项目的多年中,我们已经使一个库有机地发展成为一大堆东西。它被称为“ Util”,我敢肯定你们中的许多人在您的职业生涯中见过这些野兽之一。 该库的许多部分都是非常独立的,可以分成单独的项目(我们希望将其开源)。但是,在将它们作为单独的库发布之前,需要解决一个主要问题。基本上,在这些库之间有很多我称之为“可选依赖项”的情况。 为了更好地说明这一点,请考虑一些适合成为独立库的模块。CommandLineParser用于解析命令行。XmlClassify用于将类序列化为XML。PostBuildCheck对已编译的程序集执行检查,如果失败则报告编译错误。ConsoleColoredString是彩色字符串文字的库。Lingo用于翻译用户界面。 这些库中的每一个都可以完全独立使用,但是如果将它们一起使用,则将具有有用的额外功能。例如,将CommandLineParser和都XmlClassify公开需要的构建后检查功能PostBuildCheck。同样,CommandLineParser允许选项文件使用彩色字符串字面量require来提供ConsoleColoredString,并且它通过支持翻译文档Lingo。 因此,关键区别在于这些是可选功能。可以将命令行解析器与纯色的无色字符串一起使用,而无需翻译文档或执行任何生成后检查。或者可以使文档可翻译但仍然没有颜色。或既彩色又可翻译。等等。 通过查看该“ Util”库,我发现几乎所有潜在可分离的库都具有将其绑定到其他库的此类可选功能。如果我实际上需要将这些库作为依赖项,那么这些东西根本就不会被弄乱:如果您只想使用一个库,则基本上仍然需要所有库。 是否存在任何建立的方法来管理.NET中的此类可选依赖项?

4
npm中的可选依赖项?
我对此有类似的问题,但不完全相同。 我想让我的应用程序用户以其想要使用它的方式安装所需的任何依赖项。因此,例如,如果他们要保留到MongoDB,则仅安装与Mongo相关的库,但是如果他们要保留到Redis,则仅安装与Redis相关的库。我不想让他们下载并安装他们不会使用的库。 我知道我可以使用进行开发devDependencies,但这远不止于此。就像以上问题的答案所说,这与Python setuptools extras_require和Clojure的leiningen配置文件更紧密相关。在npm中有类似的内容吗?我真的觉得devDependencies应该是dev一种更加广泛的指定依赖项的方式。


4
在不同项目之间共享类或接口
我一直在寻找SO或此处的一些答案,但是没有任何结果,这就是为什么我要问你。 假设我有两个不同的项目-例如应用程序的服务器部分和客户端部分。我正在开发自己的部分,而我的朋友正在制作第二部分。但是我们两个都应该使用一些通用接口,例如Useror AccountInfo或ChangableAccount...,以确保兼容性。例如,如果客户端将用户数据发送到服务器,则服务器应在同一类上运行。接口等也是如此。此外,如果公共接口中有任何更改,则两个项目都应根据新情况调整其代码。 我现在看到的唯一解决方案是,创建一个额外的项目,在其中定义所有常见的事物。我们和我的朋友应该将此项目添加为对主项目(客户端或服务器)的依赖项。共享项目可以通过某些版本控制系统进行管理,因此我们始终处于最新状态。 您还建议什么其他解决方案?在专业应用中如何解决此类问题?

3
GitHub上的Git项目依赖项
我已经在该框架之上编写了一个PHP框架和一个CMS。CMS依赖于框架,但是框架作为CMS文件中的自包含文件夹存在。我想将它们作为单独的项目维护在GitHub上,但是我不想在每次更新框架时都有更新CMS项目的麻烦。理想情况下,我希望CMS以某种方式将框架文件包含在预定义的子目录中,而不是物理地提交这些文件。 Git / GitHub有可能吗?如果是这样,我需要知道什么才能使其正常工作?请记住,我对Git有非常非常基础的经验-我可以使用Eclipse的Git插件制作存储库并提交,连接到GitHub,就这样。我目前正独自从事这些项目,因此到目前为止,我还不需要了解更多有关Git的信息,但是我希望将来向其他人开放它,我想确保自己做对了。 另外,对于具有依赖性的项目,理想的工作流程应该是什么?任何有关该主题的技巧也将不胜感激。如果您需要有关我的设置的更多信息,请在评论中提问。
14 php  git  github  dependencies 

4
在分层软件体系结构中,同一层的对象之间具有依赖关系是否有问题?
考虑到具有n层体系结构和依赖项注入的中型软件,我很高兴地说属于一个层的对象可以依赖于较低层的对象,而不能依赖于较高层的对象。 但是我不确定要考虑那些依赖同一层其他对象的对象。 举个例子,我们假设一个应用程序具有三层和几个对象,如图像中的一个。显然,自上而下的依赖关系(绿色箭头)没问题,自下而上的依赖关系(红色箭头)不行,但是同一层内的依赖关系(黄色箭头)又如何呢? 除了循环依赖之外,我很好奇其他可能出现的问题以及这种情况下违反了多层体系结构的程度。

3
当依赖项的关键功能被破坏并阻碍开发时该怎么办?
昨天,我在一个Rails 5 API项目上工作,该项目正在使用“ 行为可标记”库来使事物具有标记(例如SE上的问题)。Rails 5目前处于alpha支持状态。当前有一个PR,用于修复等待合并到master中的错误;该错误导致我的功能分支在完成过程中停顿了-由于加载已中断,我无法实现该库的任何功能。 作为快速解决方案,我只是克隆了存储库,用PR所具有的相同代码修复了该问题,然后将我的Gemfile(依赖版本控制文件)指向了我自己的Github分支,直到该错误修复最终合并回master。 我很幸运,修复很简单(并且已经有人完成了此修复程序),因此我能够解决这个问题。但是,如果该库对我的应用程序开发至关重要的话,该怎么办?如果停止我的开发的错误修正对于其他人来说不是一个普遍存在的问题,那么该修正没有像这次一样迅速出现吗? 想象一下,在开发其他依赖功能之前需要先完成此功能 -在这种情况下您会做什么?如果对我来说,标记对接下来的开发工作绝对至关重要,那一切都要依靠它-但对于我的配置来说,标记依赖是错误的呢?当依赖项的关键功能阻碍了一个或多个功能部件的开发时,该怎么办? 而且,当然不能在办公椅上进行数小时或数天的剑战了……

6
在git中,如何对十二个库进行版本控制
我们正在做项目,但是我们在项目之间重用了很多代码,并且有很多包含我们共同代码的库。在实施新项目时,我们发现了更多方法来分解通用代码并将其放入库中。这些库相互依赖,而项目则取决于这些库。每个项目以及该项目中使用的所有库都需要使用它们所引用的所有库的相同版本。如果我们发布某个软件,则我们将不得不修复错误,并可能添加许多年甚至数十年的新功能。我们有大约十二个库,更改通常跨越两个以上,并且几个团队并行处理多个项目,并同时对所有这些库进行更改。 我们最近已切换到git并为每个库和每个项目设置存储库。我们使用存储作为公共存储库,在功能分支上进行新工作,然后发出拉取请求并仅在审阅后合并它们。 我们必须在项目中处理的许多问题都要求我们在多个库和项目的特定代码之间进行更改。这些通常包括库接口的更改,其中一些不兼容。(如果您认为这听起来有些可疑:我们与硬件进行交互,并将特定的硬件隐藏在通用接口之后。几乎每次我们集成其他供应商的硬件时,都会遇到我们当前的接口无法预期的情况,因此必须对其进行完善。)例如,假设一个项目P1使用的库L1,L2和L3。L1还采用了L2和L3,并L2使用L3为好。依赖关系图如下所示: <-------L1<--+ P1 <----+ ^ | <-+ | | | | +--L2 | | ^ | | | | +-----L3---+ 现在,想象一下此项目的功能需要更改,P1并L3更改的界面L3。现在添加项目P2并添加P3到组合中,它们也引用这些库。我们不能将它们全部切换到新界面,运行所有测试并部署新软件。那有什么选择呢? 在中实现新接口 L3 提出请求L3并等待审查 合并变更 创建一个新版本 L3 P1通过参考L3的新版本开始使用该功能,然后在其P1功能分支上实现该功能 提出拉取请求,对此进行审核并合并 (我只注意到我忘了切换L1,并L2到新版本,而我甚至不知道在哪里要坚持这一点,因为这将需要同时做同P1...) 这是一个繁琐,容易出错的过程,并且实施此功能的过程非常漫长,它需要进行独立审核(这使得审核变得更加困难),根本无法扩展,并且有可能使我们停业在过程中陷入困境,我们永远都做不完。 但是,如何使用分支和标记来创建一个流程,使我们能够在新项目中实现新功能而又没有太多开销?

1
避免依赖版本冲突?
几乎可以肯定,使用我的jar的任何Java项目都将对另一个jar附加依赖,我的jar也将其作为依赖项。 问题是,其他jar有多个版本。 在您项目的第二个jar版本与第二个jar版本不同的情况下,如何避免出现任何问题? 我不希望我的用户有多余的麻烦来做一些花哨的类加载技巧来添加我的jar。 我是否应该为该通用依赖项的每个可能版本制作一堆不同版本的jar?然后,您只需选择使用与您刚碰到的第二个jar版本相同的jar版本即可? 有没有更聪明的方式来处理此问题,并使人们更轻松地使用我的jar,而不会发生冲突?

3
调用供应商Web服务的单元测试方法
我有一类具有一个公共方法Send()和一些私有方法的类。它调用几个Web服务并处理响应。该处理以私有方法完成。 我想对代码进行单元测试。我的理解是,单元测试应该单独测试我的代码(即模拟供应商的响应)。 我还认为私有方法不需要进行单元测试,但是如果我仅测试Send()方法,我的代码就不会被单独测试,而取决于供应商的共鸣。 然后是否应该将我的私有方法公开,以便可以通过模拟响应对其进行测试?这似乎是不好的做法,因为我只有全班同学才需要给他们打电话。 道歉,如果这是一个基本问题,对单元测试来说还很新。 我正在使用C#和VS2010
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.