【优雅的Ruby】CONFIDENT RUBY 读书笔记(二)

December 05, 2018 20:41
访问量:154
摘要:本书和Ruby元编程,Ruby原理解析姐妹篇。适用一到两年以上的ruby开发者,进阶必备。对很多细节的东西讲的很详细,减少bug, 提高代码质量,让你的Ruby代码更加优雅。

用对象来表示特殊场景。

利用多态分发机制,消除重复代码

最常见的业务场景,判断用户是否登录的时候。

def current_user
  if session[:user_id]
    User.find(session[:user_id])
  end
end

然后再一些controller中就会这样去判断:


def greeting
    "hello" + current_user ? current_user.name : "cool" 
end

if current_user
    ...
else
    ...
end

if current_user && current_user.has_role?(:admin)
    ...
end

cart = if current_user
    current_user.cart
else
    SessionCart.new(session)
end
cart.add_item(some_item, 1)

if else 判断 current_user 随处可见。使得代码很不优雅。

用特例对象来表示当前用户

我们不再把匿名的用户表示成 nil, 而是用一个类来表示它, 取名为 GuestUser.

class GuestUser
    def initialize(session)
        @session = session
    end

    def name
        'cool'
    end
end

def current_user
    if session[:user_id]
        User.find(session[:user_id])
    else
        GuestUser.new(session)
    end
end

评论

暂无相关评论,快来抢占沙发吧!
评论框离家出走了,点击找回!
昵称
邮箱
网站
昵称
邮箱
网站