重构类提高可重用性
问题描述:
我收到以下资源:Users
,Projects
等等。这些对象的初始化几乎是一样的:我接收一个散列或一个字符串。重构类提高可重用性
- 如果我得到一个字符串,我应该向API发出请求以获取匹配的JSON,然后处理创建的getter方法。
- 如果我得到了散列,我只需要处理创建的getter方法。
问题是API的url对于每个资源都是不同的。所以我最终做如下:
一个base
模块的常用方法:
module Base
def initialize_resource_from_hash(resource, attributes)
resource.each_with_object(attributes) do |(k, v), attrs|
create_getter_method(k, v) if attrs.include?(k)
end
end
def initialize_resource_from_url(resource, attributes)
response = API.get(resource)
response.each_with_object(attributes) do |(k, v), attrs|
create_getter_method(k, v) if attrs.include?(k)
end
end
end
class User
include Base
ATTRIBUTES = %w(id name login password)
def initialize(resource)
case resource
when Hash
initialize_resource_from_hash(resource, ATTRIBUTES)
when String
initialize_resource_from_url(resource, ATTRIBUTES)
end
end
end
,然后将每个资源include
的Base
并调用这些初始化方法之一。有没有解决这个初始化问题的设计模式或好的做法,还是我解决得很好的方法?
答
class User
ATTRIBUTES = %w(id name login password)
def initialize(resource)
resource = API.get(resource) unless resource.kind_of?(Hash)
ATTRIBUTES.each{|k| create_getter_method(k, resource[k]) if resource.key?(k)}
end
end
评论这里如果你有问题要了解这个问题。如果提问,我可以改进提供更多细节的问题。 – 2013-02-25 02:20:15