2009-02-07 62 views
33

我一直在想如何在新網站上實現類似SO的徽章功能。存儲徽章標準的最佳方式是什麼?存儲徽章標準的最佳方法是什麼?

兩個想法:

  • 所有代碼
  • 「第二個系統」 - 創建一個元架構定義徽章和他們的標準。在數據庫中存儲一些信息並通過代碼查詢它來確定徽章及其標準。

有沒有更好的方法?

回答

37

規則。

您可以在系統中創建事件,並在事件流處理器中使用規則。

具體來說,假設你有一個「製作10個職位」的徽章。您不要針對每個帖子運行「來自帖子where user =:user」的「select count(*)」。相反,您有一條簡單的規則,可以監視每個帖子的來歷,並「統計它們」,將規則狀態存儲在用戶配置文件中。

這樣「製作10個職位」與「製作1,000,000」職位一樣便宜。

這也使系統更具可擴展性。

+9

如果你走這條路線,注意添加新徽章時需要分析現有用戶應該已經獲得的情況。 – 2009-02-07 02:08:48

18

我同意Will的這個觀點。

在頁面上創建「事件」,以便每次發生事件時,一個用戶刪除一個帖子,它會查詢帶有該事件的事件模塊,可以說,EVENT_USER_DELETE_POST,然後你可以選擇該事件並基於它建立一個查詢。然後您可以決定是否頒發徽章。

這將保持兩個邏輯分開並保持模塊化設計。這種方式應該很容易實現。

唯一的缺點是,如果事件未被「捕獲」,那麼用戶可能已經獲得了徽章標準,但尚未獲得獎勵。但是,這絕不應該發生。我能想到的唯一情況是如果數據庫是手動操作的。

相關問題