Ruby on rails 获取分析数据并在第页显示什么';代码应该属于模型、控制器还是视图?

Ruby on rails 获取分析数据并在第页显示什么';代码应该属于模型、控制器还是视图?,ruby-on-rails,django,model-view-controller,cakephp,symfony1,Ruby On Rails,Django,Model View Controller,Cakephp,Symfony1,假设有一个从第三方或通过服务器上的缓存数据获取“最流行项目”分析数据的调用,并且我们在所有页面上显示这些项目的名称,我们是否应该将此代码放入模型、控制器或视图(帮助器)组件中 也许它不是严格意义上的模型,因为它不直接在我们的数据存储中 也许是控制器。。。它是否应该位于“通用控制器”中,例如在app/controller/application.rb中,以便在所有视图中共享?如果它是在控制器代码中获得的,但1个月后,另一个人遵循新规范并删除视图上的显示,那么代码可能会保留在控制器中,没有人会删除它

假设有一个从第三方或通过服务器上的缓存数据获取“最流行项目”分析数据的调用,并且我们在所有页面上显示这些项目的名称,我们是否应该将此代码放入模型、控制器或视图(帮助器)组件中

也许它不是严格意义上的模型,因为它不直接在我们的数据存储中

也许是控制器。。。它是否应该位于“通用控制器”中,例如在
app/controller/application.rb中,以便在所有视图中共享?如果它是在控制器代码中获得的,但1个月后,另一个人遵循新规范并删除视图上的显示,那么代码可能会保留在控制器中,没有人会删除它

如果它在帮助程序中。。。那么,如果在代码的其他部分,控制器需要获取该数据并将其存储在
@popular
?另外,助手们不是应该通过在方法中放置重复的任务来帮助呈现数据吗?所以助手们不应该做太多的数据获取逻辑


代码放在哪里最合适?

尽管我使用.net mvc,但我认为同样的原则也适用

所以我通常会这样说:

控制器>服务>存储库代码

所以,在这种情况下,您将拥有一个分析服务来处理请求,并可以调用第三方或调用从数据库检索数据的存储库层(可能两者都有)。但是这样所有的电话都通过相同的服务。Plus删除了有关如何检索数据的任何知识。事实上,我有一次遇到过类似的情况,我们使用一个邮件客户端,从他们的服务器和我们的数据库中获取一些分析。所有这些都隐藏在服务层中,因此返回的只是一个模型,无论它看起来如何合适,都可以使用

然后所有需要它的控制器都可以共享。在视图中,我将有一个显示该数据的助手。同样,任何需要的人都可以调用帮助器,并将该帮助器所需的模型数据传入。这允许您应用干燥原理


这同样适用于我。YMMV

虽然我使用.NETMVC,但我认为同样的原则也可以适用

所以我通常会这样说:

控制器>服务>存储库代码

所以,在这种情况下,您将拥有一个分析服务来处理请求,并可以调用第三方或调用从数据库检索数据的存储库层(可能两者都有)。但是这样所有的电话都通过相同的服务。Plus删除了有关如何检索数据的任何知识。事实上,我有一次遇到过类似的情况,我们使用一个邮件客户端,从他们的服务器和我们的数据库中获取一些分析。所有这些都隐藏在服务层中,因此返回的只是一个模型,无论它看起来如何合适,都可以使用

然后所有需要它的控制器都可以共享。在视图中,我将有一个显示该数据的助手。同样,任何需要的人都可以调用帮助器,并将该帮助器所需的模型数据传入。这允许您应用干燥原理

这同样适用于我。YMMV

(免责声明:这是来自Django的背景,如果术语或方法不能直接转化为您正在使用的MVC框架,我深表歉意。)

我的设计过程基本如下:

我知道我不想为每次点击的页面重新计算分析数据,所以我的选择是仅仅依靠缓存还是使用缓存并将临时结果存储在数据库中。我个人倾向于后一种方法

因此,我会设置一个模型来处理为手头的任务存储分析数据子集的问题,并在您的案例中保存“最受欢迎的项目”。然后,我将创建一个自动任务(比如在cron中,或者在Django中,我将使用芹菜)来定期聚合数据,可能是在每晚午夜

然后,我只需要编写一些帮助程序来快速查询聚合数据,并将其显示在我的模板(其他框架中的视图)中

总之,我将在MVC范例中结合使用模型和视图。我看不出有任何理由让控制器真正参与这个过程。

(免责声明:这是来自Django的背景,如果术语或方法没有直接转化为您正在使用的MVC框架,我深表歉意。)

我的设计过程基本如下:

我知道我不想为每次点击的页面重新计算分析数据,所以我的选择是仅仅依靠缓存还是使用缓存并将临时结果存储在数据库中。我个人倾向于后一种方法

因此,我会设置一个模型来处理为手头的任务存储分析数据子集的问题,并在您的案例中保存“最受欢迎的项目”。然后,我将创建一个自动任务(比如在cron中,或者在Django中,我将使用芹菜)来定期聚合数据,可能是在每晚午夜

然后,我只需要编写一些帮助程序来快速查询聚合数据,并将其显示在我的模板(其他框架中的视图)中


总之,我将在MVC范例中结合使用模型和视图。我看不出有任何理由让控制器真正参与这个过程。

我建议创建一个google_api数据源。一个快速的谷歌搜索应该会弹出一些看起来已经完成了一半的搜索

在数据源中使用google代码中的GAPI类从google获取数据,并将结果格式化为您可以使用的格式

然后,可以为要跟踪的每个度量设置模型。例如,类GoogleAnalyticsKeyword、GoogleAnalyticsAdWordCampaign等。这些模型可以设置为使用自定义数据源。从模型中,您可以执行ca