2009-10-25 60 views
7

在我的应用程序中,我希望在登录时提供一个类似于仪表板的仪表板,以便了解发生的情况。我有大约4个模型,我需要从中收集数据并将其排序。我的问题是知道的动作,所以我可以得到每个模型的特定字段。应用程序仪表板查看逻辑

以下是关于如何去做的一些想法,但我觉得它们并不是最好的和不完整的。

  1. 我有一个单独的模型,其中包含:model,associated_id,action。 “Post,1,创建”可能是一个例子。

  2. 有4个不同的数组,并将它们按正确的顺序合并,如created_at

这是什么最好的方法呢?我已经提供了如下的例子:

alt text

+0

灿你给我们提出了4个有问题的模型的例子吗?以及这些行为是如何存储在每个模型中的? – EmFi 2009-10-25 07:48:21

回答

3

使用一个单独的模型来存储Feed条目,你在你的第一个想法建议。你看设计模式被称为polymorphic association pattern

假设这种新模式被称为饲料,你可以使用列多态性associaiton模式如下:feedable_type和feedable_id(如并列到你的建议列名模型和associated_id)

我必须承认,你的问题是不是多态关联的简单理解较大,饲料是现代信息设计的一大创新并带来许多复杂的功能,包括:

  • 隐私
  • 跟随/订阅
  • 过滤
  • 合并

所有这一切都可以根据这些属性变得更加激烈复杂。如果您必须满足一些非功能性需求(如扩展和性能),则头痛将迅速复合。

如果您曾经构建过Facebook应用程序,那么了解他们的提要发布API的工作原理是非常有启发性的。

您很快就会注意到,用于存储Feed的单独模型在提供HTML条目时相当无用,但加载了装备精良的原始模型以使数据库成本很高。为了解决这个问题,我让原始模型呈现Feed的HTML,并将其存储到Feed表中。

当然,实现甚至比这更复杂一点。与Facebook一样,所有Feed都有1点共同点(它们来自人)。因此,每个供稿条目都有user_id(可以这么说)。既然我们知道所有提要都有这些数据,并且可以呈现新闻提要的“谁做了”部分,我们不会预先渲染该部分。

预渲染对于预渲染来说非常有帮助,以后很难从feed模型重新构建,但是当我们确定组件无处不在,并且被隐藏到我们的feed模型中时,延迟预渲染。

最后,研究开源项目是学习