2009-10-25 59 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模型中時,延遲預渲染。

最後,研究開源項目是學習