1

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

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

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

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

4

1 回答 1

1

重新格式化应该继续负责从谷歌分析中提取数据。您的应用程序的其余部分都不应该知道 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的时候,会非常明显地知道发生了什么以及它是在哪里定义的。

于 2013-05-11T07:19:31.323 回答