[英]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.