首页 > 解决方案 > 出于什么原因我应该将课程设为私有?

问题描述

当我查看我的代码并实施我所学的内容时,有一件事让我很困扰。为什么这些方法或一般方法是私有的很重要?

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

一些方法是指抽象出功能。我认为没有必要。

标签: ruby-on-rails

解决方案


在开发 API 时(在传统意义上:描述如何使用您的程序,在这种情况下为类和方法),private标志着它是一种不需要了解(和/或什至不利于调用的方法) “外部”)当您想与该类或其实例交互时。

关于“这有关系吗?”:从技术角度来看,在 Ruby 中:不是真的。如果需要,您可以在其他对象上调用私有方法(使用“技巧”,但不能使用通常的调用:)@myobject.themethod()

从用户的角度来看:很多。您正在交流您希望如何使用您的东西。

从开发人员的角度来看:如果您考虑用户,也是一个日志(参见前面的点)。如果您积极考虑您的 API(模块、类、方法)并有意识地使用private,您最终可能会得到设计更好的“接口”(API)。

请注意,在其他编程语言(例如 Java)public中,protectedprivate可能会强烈声明例如子类如何访问您的类和接口的某些内部(这里的“接口”一词表示语言特性)。因此,如果您曾经使用过另一种语言,请务必查看其中private的含义。

我没有找到关于私人的官方文档,但例如这个 ruby​​guide:https ://www.rubyguides.com/2018/10/method-visibility/ 。


推荐阅读