2

ゲーム アプリケーションのポイント システムを設計しようとしていますが、モデルをセットアップする最善の方法を見つけるのにいくつか問題があります。基本的なニーズは次のとおりです。

  • 各ユーザーには、基本的に「PointsCalculator」オブジェクトを割り当てることができ、ユーザーが獲得したポイントを追跡する責任があります。

  • 各ユーザーの "PointsCalculator" ロジックは異なる可能性があります。たとえば、あるユーザーは、連続して 1 時間以上プレイするたびに、追加の 100 ポイントを獲得できます。別のユーザーは、午後 8 時から午後 10 時の間で 2 倍のポイントを獲得する可能性があります。

私たちは、ユーザーごとにカスタマイズできるロジックを保存できるモデル設定を作成する最善の方法を見つけようとしていますが、それでも DRY でテスト可能です。

誰かにコードを書いてもらう必要はありません。より経験豊富な開発者、または過去に同様の問題に取り組んだことがある人のフィードバックをいただければ幸いです。

注:上記はさらに明確にするために編集されていますが、それでも不明な場合はお知らせください。

4

1 に答える 1

3

あなたの複雑さのレベルに依存する難しい質問:

  • すべてのPointsCalculatorが明確に定義されている場合は、単一テーブル継承(STI)に進む必要があります。最も単純なケース。

  • しかし、多くの柔軟性が要求される場合、これはより困難になり、DCIのように動的にメソッドを含めることを検討する必要があります。それは最も複雑です。以下の詳細を参照してください。

例:モデル内のシリアル化されたオブジェクトに計算機の動作のリストを保存します。

behaviors = [ 'behavior1', 'behavior2' ]

各動作は、同じ名前のクラスまたはモジュールにリンクされています(例:Behavior1および。) Behavior2

次に、必要なときにいつでも、たとえばでオブジェクトにビヘイビアーを追加しますafter_initialize

after_initialize :set_behaviors

def set_behaviors
  behaviors.each do |b|
    self.extend(b.constantize)
  end
end
于 2012-09-08T13:02:16.507 に答える