使用来自单独服务的方法保佑对象实例

时间:2016-01-10 09:20:05

标签: ruby metaprogramming

背景

我有一项服务,可以查询并返回多个商店和日期范围的交货时间段。除此之外,我还有一个单独的服务来查询将返回的时隙的容量信息(我们的容量管理系统与时隙没有直接关系,但是由时间范围定义)。

问题

每个单独的时间段对象都有一个名为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,以便我可以将容量服务传递到范围中。虽然这有效,但对我来说并不合适。

有更好的方法吗?

0 个答案:

没有答案