我是新的RoR,我似乎无法掌握如何构建我的应用程序。
我有一个使用garb从Google Analytics中提取数据的应用。在对数据进行一些数字处理之后,应用程序将填充Report
模型并向用户显示报告。
目前,我正在使用关注点分离Google Analytics逻辑。在我的Concer文件夹中,我有一个GoogleAnalytics
模块负责提取数据。 Report
模型包含GoogleAnalytics
模块。在Report
模型中进行数字运算之前,我需要清理并重新格式化数据。这应该是GoogleAnalytics
模块还是帮助者的责任?
是否有更好的做法来包含第三方服务?
答案 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
时,它发生了什么以及它被定义的地方非常明显。