在MVC框架中,屏幕抓取模块应放在哪里?
在一个使用MVC模式的框架中,屏幕抓取模块最合理的位置应该放在哪里呢?是在模型部分还是控制器部分?或者说,它根本不属于这个模式?
4 个回答
0
我猜这个抓取工具只是用来收集数据的。
如果数据被抓取并存储,这个过程并不是直接放到模型(M)、视图(V)或控制器(C)里。你可以把这个抓取过程设置成定时任务,按照你定义的时间间隔去运行,抓取的数据存储起来,然后再定义一些模型来访问这些数据。
我不建议每次控制器请求模型的时候都去调用抓取过程,除非你有在缓存抓取请求的结果。
编辑:
这个定时任务可以是一个控制器,但不应该是公开可调用的。
0
从某种意义上说,屏幕抓取工具就像是这个应用的用户。我觉得它应该是MVC架构之外的一部分,跟控制器进行互动,就像网页向控制器发送信息一样。如果界面发生变化,这样做就方便在上面加一个网页。
2
你可以把它当作一个模型来使用,只要你设计得像模型一样。这样的话,它就可以很方便地在控制器中使用:
def update
@company = Company.find(params[:id])
@scraper = Scraper.find(:page => some_url, :method => :rip)
@scraper.product_details.each do |params|
@company.products.create(params)
end
end
当你设计抓取工具的输出格式时,如果能和其他对象(比如你存储数据的表格结构)兼容,那就会非常方便。
有“模型样”的对象通常很有用。在这种情况下,你可以把抓取工具看作是连接另一个网站的接口,而不是数据库,从这个角度来看,它和ActiveResource是很相似的。其实没有规定模型一定要基于ActiveRecord来构建。