我有一项服务,可以查询并返回多个商店和日期范围的交货时间段。除此之外,我还有一个单独的服务来查询将返回的时隙的容量信息(我们的容量管理系统与时隙没有直接关系,但是由时间范围定义)。
每个单独的时间段对象都有一个名为enough_capacity?
的方法,每次执行查找以确定该单个时隙的容量限制。但是,考虑到我可以查询更多的容量信息,这不是很有效。
在阅读了一些元编程之后,我想我可以使用新的enough_capacity?
单例方法(它不应该适用于所有实例)来保佑每个实例,这些方法基于缓存数据执行查找集。
要做到这一点,我已经想出了这个:
def get_blessed_delivery_timeslots(store)
get_store_delivery_timeslots(store).each do |timeslot|
timeslot.singleton_class.class_exec(@capacity_service) do |capacity_service|
define_method(:enough_capacity?) { capacity_service.enough_capacity?(self) }
end
end
end
我在单例类上使用class_exec
,以便我可以将容量服务传递到范围中。虽然这有效,但对我来说并不合适。
有更好的方法吗?