我问这个Ruby,但我想这个原则可以应用于每个包含多个文件的项目。说我有一个主文件,例如application
需要其他模块model1
和model2
。这两个模块都需要common
模块。我在common
和application
中看到了许多需要model1
中的model2
和而不是的Ruby项目。虽然如果您总是直接使用application
,但是如果您需要其他地方的模块之一,则可以获得NameError
。那么这可能会影响项目的模块化?我是否应该总是更喜欢明确要求每个文件中的所有依赖项? (不对 文件所需的内容做出任何假设)
答案 0 :(得分:1)
如果模块设计为从不同的应用程序加载,我总是需要所有的依赖。如果model1
仅是特定于应用程序的元素,则不需要加载已加载的模块。
但它会看一看,真正需要什么。
model1
和model2
需要common
还是需要mainfile.rb? (我不认为,在您的具体情况下就是这种情况)有时您不需要加载所有要求,如果您的一个要求(让我们称之为主要要求)已经加载了其他(子)要求。 / p>
答案 1 :(得分:0)
我将require
放在正在使用require
d的文件中。这部分将您的代码放入便携式模块中。您可以在目录/命名空间之间移动文件,并且可以将部件取出并将它们放入其他存储库/项目中,或将它们转换为宝石。 require
在需要的地方的做法也使您的代码更具沟通性,因此更容易理解。早期的读者可以更好地了解文件中代码的责任范围。
通过将require
放在某个高级或顶级文件中,您将嵌入较高级别文件与较低级别文件的耦合。较高级别的文件获取有关较低级别文件的功能和需求的知识。您还会模糊实际使用依赖项的位置。如果您希望删除未使用的依赖项,这会使清理更具挑战性。您无法轻易告诉使用给定依赖项的位置和方式。如果将require
放在使用它们的位置,那么当您从该文件中删除依赖项使用时,可以从给定文件中删除require
,如果它恰好是require
d在另一个文件中,您的应用程序不会因删除而中断。如果将require
放在更高级别的文件中,开发人员可能会从一个文件中删除该用法,然后认为不再使用该依赖关系,并从中删除require
更高级别的文件,从而破坏了使用它的其他文件中的代码。