使用第三方API的rails应用程序的结构

时间:2013-05-10 21:49:08

标签: ruby-on-rails

我是新的RoR,我似乎无法掌握如何构建我的应用程序。

我有一个使用garb从Google Analytics中提取数据的应用。在对数据进行一些数字处理之后,应用程序将填充Report模型并向用户显示报告。

目前,我正在使用关注点分离Google Analytics逻辑。在我的Concer文件夹中,我有一个GoogleAnalytics模块负责提取数据。 Report模型包含GoogleAnalytics模块。在Report模型中进行数字运算之前,我需要清理并重新格式化数据。这应该是GoogleAnalytics模块还是帮助者的责任?

是否有更好的做法来包含第三方服务?

1 个答案:

答案 0 :(得分:1)

重新格式化应该继续负责从Google Analytics中提取数据。您的应用程序的其余部分都不必知道Google Analytics如何返回其数据的格式 - 模块应将其转换为合理的标准界面,并将其他所有内容隐藏起来。

我还强烈考虑将这些内容放入服务对象而不是模块中。包含模块会变得混乱,因为当您在对象上调用方法时,您不知道该方法的定义位置。如果你在很多其他模型中包含相同的模块,我只会使用这种模式,这是一个真正的DRY游戏。

服务对象看起来像(取决于您需要使用哪些参数来提取数据):

class GoogleAnalyticsDataFetcher

  attr_accessor :data

  def new ga_id
    @ga_id = ga_id
  end

  def fetch
    @data = do_some_stuff
  end

end

然后你可以从控制器中调用它,或者将它包装在某个地方的Report模型中。然后,当你去GoogleAnalyticsDataFetcher.new(id).fetch时,它发生了什么以及它被定义的地方非常明显。