0
我收到以下資源: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
並調用這些初始化方法之一。有沒有解決這個初始化問題的設計模式或好的做法,還是我解決得很好的方法?
評論這裏如果你有問題要了解這個問題。如果提問,我可以改進提供更多細節的問題。 – 2013-02-25 02:20:15