0
我有以下代碼來表示Ruby中的不同值對象。不同類之間唯一改變的是INITIALIZATION_ATTRIBUTES數組,它表示值對象的屬性列表。我找不到幹這個代碼的方法。我嘗試使用模塊並訪問包含的類的常量,但我遇到了描述爲here的怪異常數查找行爲。本質上,Module代碼被多次評估,它解釋最後評估的類的常量並將其值應用於所有Value Object類。如何在Ruby中烘乾此代碼
有沒有更好的選擇?我也嘗試過一個基礎類,但我無法完成它的工作。
module Values
class MaintenanceRegimeSerializer
INITIALIZATION_ATTRIBUTES = [:distance_between_services, :months_between_services]
def self.load(json)
json ||= '{}'
hash = JSON.parse json, symbolize_names: true
self.new(*INITIALIZATION_ATTRIBUTES.map {|key| hash[key]})
end
def self.dump(obj)
unless obj.is_a?(self)
raise ::ActiveRecord::SerializationTypeMismatch,
"Attribute was supposed to be a #{self}, but was a #{obj.class}. -- #{obj.inspect}"
end
obj.to_json
end
attr_reader *INITIALIZATION_ATTRIBUTES
define_method :initialize do |*args|
raise ArgumentError unless INITIALIZATION_ATTRIBUTES.length == args.length
INITIALIZATION_ATTRIBUTES.each_with_index do |attribute, index|
instance_variable_set "@#{attribute}", args[index]
end
end
end
end
你是說你有幾個類,它們都是一樣的,除了初始化屬性? – EJ2015
你說你想讓這段代碼更加乾爽 - 暗示你在某個地方重複着自己。那會是什麼?這對我來說看起來很「元」。 –