2012-09-08 27 views
2

我想設計一個遊戲應用程序的積分系統,並且有一些問題想出了設置模型的最佳方法。基本需求是:靈活點系統的Rails模型

  • 每個用戶基本上可以分配一個「PointsCalculator」對象,負責跟蹤點的用戶賺取

  • 每個用戶的「PointsCalculator」邏輯可能是不同。例如,一個用戶每次連續玩超過一個小時可能會額外獲得100分。另一位用戶可能會在晚上8點和晚上10點之間賺取雙倍積分。

我們正在試圖找出創建模型建立,使我們能夠存儲可爲每個用戶定製邏輯的最好辦法,但仍是乾和測試。

我不需要任何人爲我編寫代碼 - 我會更加欣賞更有經驗的開發人員或過去解決類似問題的任何人的反饋。

注意:上面已被編輯爲更清晰,但讓我知道如果它仍然不清楚。

+0

我不明白你想達到什麼,你可以更加解釋。所以,即使其他人可以更好地理解 –

回答

3

難的問題取決於你的複雜程度:

  • 如果所有的點計算器是有嚴格規定,你應該前往朝單表繼承(STI)。最簡單的情況。

  • 但是,如果需要很大的靈活性,這變得更加困難,你應該考慮動態地包括方法,一個DCI。這是最複雜的。見下面的細節。

例如:你在一個序列化對象存儲在模型中的計算器的行爲列表:

behaviors = [ 'behavior1', 'behavior2' ] 

每個行爲被鏈接到一個類或模塊具有相同的名稱,如:Behavior1Behavior2

然後,您可以隨時將行爲添加到對象,例如在after_initialize中。

after_initialize :set_behaviors 

def set_behaviors 
    behaviors.each do |b| 
    self.extend(b.constantize) 
    end 
end 
+0

我真的很喜歡這個想法。我實際上即將實施一個PointsCalculatorAlgorithm作爲一個單獨的模型來存儲不同的行爲,但你的第二種方法似乎更加乾淨。非常感謝你的幫助! – Bryce