【发布时间】:2014-07-16 12:13:38
【问题描述】:
我正在按照我一直在研究的研讨会实施“服务对象”,我正在构建一个 reddit API 应用程序。我需要对象返回一些东西,所以我不能只执行初始化程序中的所有内容。我有这两个选择:
选项1:类需要实例化
class SubListFromUser
def user_subscribed_subs(client)
@client = client
@subreddits = sort_subs_by_name(user_subs_from_reddit)
end
private
def sort_subs_by_name(subreddits)
subreddits.sort_by { |sr| sr[:name].downcase }
end
def user_subs_from_reddit
@client.subscribed_subreddits :limit => 100
end
end
调用:
@subreddits = SubListFromUser.new(@client).user_subscribed_subs
或 Option2 将其作为类方法:
class SubListFromUser
def self.user_subscribed_subs(client)
sort_subs_by_name(client, user_subs_from_reddit)
end
private
def self.sort_subs_by_name(subreddits)
subreddits.sort_by { |sr| sr[:name].downcase }
end
def self.user_subs_from_reddit(client)
client.subscribed_subreddits :limit => 100
end
end
调用:
@subreddits = SubListFromUser.user_subscribed_subs(@client)
在这种情况下,什么被认为是“最佳做法”?我不应该使用 object.new(args).method 有什么原因吗?我认为它提供了更清洁的服务等级,但我不确定这种方法的技术细节以及它是否有缺点。
编辑:或选项 3 - 我要解决这一切都错了,有更好的方法 :)
【问题讨论】:
-
你认为 2 行不通,你使用类方法
self.user_subscribed_subs(client)并设置实例变量@client = client现在这个@client.subscribed_subreddits引发错误,因为@client返回nil -
它确实有效,但我没有考虑实例变量,你说得对,我应该把它们拿出来。我很快就对这篇文章进行了更改,但忘记更改了,抱歉。
标签: ruby-on-rails ruby