繁体   English   中英

使用命名空间类的Rails 4或为子文件夹配置自动加载,使用哪个?

[英]Rails 4 using namespaced classes or configuring autoloading for subfolders, which to use?

因此,在Rails中,我们可以在默认自动加载的文件夹的子文件夹中使用类||模块,这些命名空间如下: ContractServices::Approval Rails将从其中获取例如在app/services/contract_services/approval.rb ,但我们必须命名该类作为ContractServices::Approval for Rails来找到它。

同样,我们可以通过config.autoload_paths自动加载该子文件夹路径,因此我们可以简单地使用Approval作为提到的类名。

两种方法都可以,但是更好的做法是什么?

通常,当您将一堆东西放在子目录中时,是因为您认识到它们在逻辑上与父目录中的东西是分开的, 并且它们在逻辑上是相互关联的。 对于在Ruby / rails中对某些内容进行命名空间也是一个好主意时,这些也是令人信服的标准。

另一个因素是实用性,您拥有的“顶级”自动加载目录越多,全局命名空间中拥有的常量(即类名)就越多,因此名称冲突的风险就越高。 IE浏览器。 如果您将::Approval自动加载,是因为您已将app/services/contract_services放入了autoload_paths ,然后过了一会儿您创建了app/services/approval.rb您的文件系统将允许您创建它,因为与该文件中的文件没有冲突子目录,而ruby不在乎您是否拥有一个稍后在其他地方重新打开的类,因此您可能很难调试名称空间冲突。

您问题的真正答案是,不,没有为此得到广泛接受的最佳实践,并且Rails本身会将app/models/concerns自动加载到全局名称空间中(尽管至少它们是模块,所以如果出现以下情况,您将收到错误消息)有一个模块<->类名冲突)。 仅当您拥有大型应用程序和/或大型提交者团队时,即使我上面的推理也才真正有意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM