ruby-on-rails - 为什么在 Rails 中将非操作 Controller 方法保持私有(private)很重要?

标签 ruby-on-rails

<分区>

编辑:此问题已被标记为与有关私有(private)方法用途的更通用的 OO 问题的重复。这个问题专门针对 Controller ;我想知道除了经典的 OO“不要公开任何不需要公开的方法”之外是否还有其他原因。


有许多资源警告说,非 Action Controller 方法应该保持private,以避免这些方法被路由到的可能性。我的问题是关于该警告背后的原因。

我的理解是 routes.rb 文件是可能路由的白名单,那么如果 Controller 有公共(public)方法(只要它们不在 routes.rb 文件)?将这些方法设为私有(private)只是为了防止 future 我/开发人员错误地添加包含这些方法的路由的额外保护层吗?公共(public) Controller 方法是否有其他一些偷偷摸摸的方式可以进入路由?

This book section警告 Controller 的公共(public)方法默认情况下可以通过某些 URL 访问。对吗?

This answer解释说保持 Controller 方法私有(private)可以防止任何请求被路由到它,但这不是已经被 routes 处理了吗?

The Rails Guide提到最好降低不应作为操作的 Controller 方法的可见性。

The Thoughtbot Rails style guide甚至不接受公共(public) Controller 方法的概念,并说要使用 private 而不是 protected

这里显然有社区共识。这些建议背后的原因是什么?

最佳答案

所有这些规则都是有道理的。保持类(包括 Rails Controller )的公共(public)接口(interface)(一组公共(public)方法)尽可能小的想法来自 OOP 范例和 SOLID 规则。这样做的动机是,它可以使您的系统在增长和重构方面更加健壮和灵活(您拥有的公共(public)方法更少 - 代码中的调用更少 - 易于重构)。

简而言之,如果您不需要某个方法在“外部”可见,则默认将其隐藏。我的意思是,当您从一个公共(public)方法开始编写一个新类时,确实需要在外部调用它,并让其他方法保持私有(private),直到您真正在外部需要它们。

由于外部可访问,您需要将它们保密的解释是部分正确的。实际上,如果没有 URL 指向该方法,则无法通过 URL 访问公共(public)或私有(private)方法。换句话说:此方法没有定义的路由 - 没有它的调用。

关于ruby-on-rails - 为什么在 Rails 中将非操作 Controller 方法保持私有(private)很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48709248/

相关文章:

sql - Rails - PostgreSQL bool where 语句,错误 : operator does not exist: boolean = integer

ruby-on-rails - ruby rails : Exclude Elements from Arrray

ruby-on-rails - 了解 MongoMappers 的多方面关系

jquery - Rails,发送 json 参数

ruby-on-rails - Ruby 内置的#permutation 和#repeated_permutation 方法的时间复杂度是多少?

ruby-on-rails - Rails 迁移添加一个 null : false column with an initial value that's not an ongoing default

ruby-on-rails - 云形成中 "Rails App Server"的类型是什么?

ruby-on-rails - FactoryGirl 和协会

ruby-on-rails - Capybara:第一次测试超时 'failed to reach server, check DNS and/or server status' ,所有其他测试工作正常

ruby-on-rails - 如果我只创建/读取,是否应该避免创建完整的 RESTful CRUD 资源?