Ruby名称空间礼仪和惯例

Ruby名称空间礼仪和惯例,ruby,namespaces,naming-conventions,Ruby,Namespaces,Naming Conventions,如果我正在为一个已建立的库编写帮助程序,我是应该在它们的命名空间中创建一个TheirLibrary::MyHelper模块,还是不去做自己的::TheirLibraryMyHelper 我认为可以预见的是,库通常有向其名称空间添加扩展的先例,例如Spec::Rails,它是现有::Spec名称空间中用于RSpec的Rails helpers插件 另一方面,我不觉得我“拥有”了其他作者的名称空间,所以我是否有业务向其添加子名称空间?我将不参与他们的名称空间(无论您最终选择如何命名扩展名称空间)因为

如果我正在为一个已建立的库编写帮助程序,我是应该在它们的命名空间中创建一个
TheirLibrary::MyHelper
模块,还是不去做自己的
::TheirLibraryMyHelper

我认为可以预见的是,库通常有向其名称空间添加扩展的先例,例如
Spec::Rails
,它是现有
::Spec
名称空间中用于RSpec的Rails helpers插件


另一方面,我不觉得我“拥有”了其他作者的名称空间,所以我是否有业务向其添加子名称空间?

我将不参与他们的名称空间(无论您最终选择如何命名扩展名称空间)因为这意味着你不会意外地与他们决定要做的事情发生碰撞。

环顾四周,我注意到“插件”或“扩展”gem的约定要求如下:

require'coolthing/plugin'
对应于名称空间
coolthing::plugin

而其他项目是

需要与唯一名称空间相对应的“coolthing插件”


通常,只有那些“正式”的名称空间才会嵌入到原始名称空间中。那些来自不同方面的后续添加应该使用自己的名称空间。

我称之为
TheirLibraryHelpers::MyModule
。老实说,Rails干扰过库甚至核心Ruby的方式对于第三方库来说是不可取的(如果不是说非常糟糕的话)。