我有一个 rake 任务,它从数据库(事件模型)中提取状态为“打开”的事件的数据,并通过调用两个不同类中的方法来处理这些事件。第一个根据某些条件对事件进行批处理,另一个是为这些事件批次生成 CSV 并将该 CSV 上传到外部网站的爬虫,然后在爬虫完成执行后更新引用这些批次的每个事件的状态。
有两种方法可以将 Active Record 对象传递给这两个类的方法。
- 将 ActiveRecord 对象传递给两个类(我当前的实现)
- 传递对象的数据库表 id 并从每个类中获取。
这些选项中的哪一个对它的“气味”较少。我的大脑告诉我,一旦 id 到达另一个类,通过执行另一个数据库查询来传递 id 会降低性能。另一方面,传递带有所有数据的 ActiveRecord 对象似乎是多余的,因为将更新的只是状态。那么哪个选项更好呢?我已经包含了 rake 任务,只是为了清楚地了解我的意思。
desc "Process open Events ..."
task :process_open_events => :environment do
open_events = Event.find_all_by_status("Open")
event_batches = EventUtils::EventProcessor.create_event_batches(open_events)
crawler = EventsCrawler.create!
crawler.enqueue_crawler(event_batches)
end