ruby-on-rails - 出于什么原因我应该将课程设为私有?
问题描述
当我查看我的代码并实施我所学的内容时,有一件事让我很困扰。为什么这些方法或一般方法是私有的很重要?
class ApplicationController < ActionController::Base
before_action :require_login
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
def require_login
if session.include? :user_id
user = User.find(session[:user_id])
else
redirect_to root_path, notice: "You must be signed in to do that!"
end
end
helper_method :current_user
end
一些方法是指抽象出功能。我认为没有必要。
解决方案
在开发 API 时(在传统意义上:描述如何使用您的程序,在这种情况下为类和方法),private
标志着它是一种不需要了解(和/或什至不利于调用的方法) “外部”)当您想与该类或其实例交互时。
关于“这有关系吗?”:从技术角度来看,在 Ruby 中:不是真的。如果需要,您可以在其他对象上调用私有方法(使用“技巧”,但不能使用通常的调用:)@myobject.themethod()
。
从用户的角度来看:很多。您正在交流您希望如何使用您的东西。
从开发人员的角度来看:如果您考虑用户,也是一个日志(参见前面的点)。如果您积极考虑您的 API(模块、类、方法)并有意识地使用private
,您最终可能会得到设计更好的“接口”(API)。
请注意,在其他编程语言(例如 Java)public
中,protected
也private
可能会强烈声明例如子类如何访问您的类和接口的某些内部(这里的“接口”一词表示语言特性)。因此,如果您曾经使用过另一种语言,请务必查看其中private
的含义。
我没有找到关于私人的官方文档,但例如这个 rubyguide:https ://www.rubyguides.com/2018/10/method-visibility/ 。
推荐阅读
- git - 更改 Git/GitHub 存储库的作者姓名和电子邮件,为所有提交保留时间戳
- reactjs - 如何检查导航链接中的复选框?
- python - 正则表达式匹配负后瞻、递归模式和负前瞻
- python - 选项 -s 已弃用,请使用 -video_size。未找到选项 video_size
- c# - Arduino 不向 WinForms 应用程序发送数据
- c# - 删除 DataTables SearchBuilder 中的条件
- javascript - Node.js:“无法读取未定义的属性‘toString’
- c# - 基于变量的自动映射器中的映射
- matlab - 如何从Matlab中的for循环将向量的一部分插入矩阵?
- python - 保存之前的 n 个训练权重