我应该在每个文件中明确要求所有依赖项吗?

时间:2011-08-30 11:10:21

标签: ruby dependencies require modularity

我问这个Ruby,但我想这个原则可以应用于每个包含多个文件的项目。说我有一个主文件,例如application需要其他模块model1model2。这两个模块都需要common模块。我在commonapplication中看到了许多需要model1中的model2而不是的Ruby项目。虽然如果您总是直接使用application,但是如果您需要其他地方的模块之一,则可以获得NameError。那么这可能会影响项目的模块化?我是否应该总是更喜欢明确要求每个文件中的所有依赖项? (不对 文件所需的内容做出任何假设)

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我将require放在正在使用require d的文件中。这部分将您的代码放入便携式模块中。您可以在目录/命名空间之间移动文件,并且可以将部件取出并将它们放入其他存储库/项目中,或将它们转换为宝石。 require在需要的地方的做法也使您的代码更具沟通性,因此更容易理解。早期的读者可以更好地了解文件中代码的责任范围。

通过将require放在某个高级或顶级文件中,您将嵌入较高级别文件与较低级别文件的耦合。较高级别的文件获取有关较低级别文件的功能和需求的知识。您还会模糊实际使用依赖项的位置。如果您希望删除未使用的依赖项,这会使清理更具挑战性。您无法轻易告诉使用给定依赖项的位置和方式。如果将require放在使用它们的位置,那么当您从该文件中删除依赖项使用时,可以从给定文件中删除require,如果它恰好是require d在另一个文件中,您的应用程序不会因删除而中断。如果将require放在更高级别的文件中,开发人员可能会从一个文件中删除该用法,然后认为不再使用该依赖关系,并从中删除require更高级别的文件,从而破坏了使用它的其他文件中的代码。