2011-08-30 55 views
3

我在问这个Ruby,但我想这个原理可以应用于每个有多个文件的项目。假设我有一个主文件,例如application,需要一些其他模块model1model2。这两个模块都需要common模块。我见过很多Ruby项目,要求在applicationcommonmodel1model2。虽然这可以直接使用application,但如果您需要使用其他模块之一,则可以获得NameError。那么这可能会影响项目的模块化吗?我是否应该更喜欢明确要求每个文件的所有依赖关系? (通过不作任何关于的假设,其中需要该文件)我应该明确要求每个文件中的所有依赖关系吗?

+1

有点相关的例子:http://stackoverflow.com/questions/6896883/active-merchant-uninitialized-constant-activesupportxmlmini-rexmlstringio –

回答

1

如果模块被设计为从不同的应用程序加载,我总是需要所有的依赖关系。如果model1只是特定于应用程序的元素,则不需要加载已加载的模块。

但它会看看,真正需要什么。 model1model2需要common还是需要mainfile.rb? (我不认为,在您的具体情况下就是这种情况)有时,如果您的一项要求(我们称之为主要要求)已经加载其他(子)要求,则无需加载所有要求。

0

我将require s放入正在使用require d的文件中。这部分将您的代码分解为便携式模块。您可以在目录/名称空间之间移动文件,并且可以将部分文件抽出并放入其他存储库/项目中,或将它们变成宝石。在需要的地方执行require也会使您的代码更具沟通性,因此更易于理解。早期的读者会更好地了解文件中代码的责任区域。

通过将require设置在某个顶层或顶层文件中,即嵌入了较高层文件与较低层文件的耦合。较高级别的文件获取有关较低级别文件所需和需要的知识。您还隐藏实际使用依赖关系的位置。这使清理更具挑战性,如果你想删除未使用的依赖关系。您无法轻易地告诉在何处以及如何使用给定的依赖关系。如果require被放在使用它们的位置,那么当从该文件中删除依赖项用法时,如果在另一个文件中出现require d,则可以从给定文件中删除require,则应用程序不会因为去除。如果将require放在更高级别的文件中,则开发人员可能会从一个文件中删除使用情况,然后认为不再使用该依赖项,并从较高级别的文件中删除require,从而打破代码在使用它的其他文件中。造成缺少依赖一个错误的

相关问题