Stackoverflowには気の利いたバッジシステムがあります。私が気づいたことの1つは、バッジがすぐには授与されないことですが、基準を満たした後、ある種の遅延があるように見えることがあります。バッジを持っている他のいくつかのサイトでもこれに気づきました。
おそらくこれは、新しいバッジを授与する必要があるかどうかを確認するために定期的にスキャンする遅延ジョブを使用しているためです。このアプローチもここでアドバイスされていると思います:
バッジを実装する方法は?
ただし、なぜこれが必要なのかはよくわかりません。実装では、新しいコメントが投稿されるなど、関連するアクションが実行された後、checkAwardBadge関数が呼び出されてチェックするシステムを使用することをお勧めします。ユーザーは新しいコメントバッジの基準を満たしています。
スピード的には、関連するすべてのユーザー統計は、UserStatsのように、Userのサブモデルに単純に隠されているので、毎回コメントの数を数えるのではなく、単純なクエリになると思っていました。
私が好んでいるシステムは、高速で非常に理解しやすいものでなければならないことに気づきました。仕事の遅れで物事を複雑にする必要がある理由について、私がここで見逃している欠点はありますか?
明確にするために:私は抽象クラスAchievementsを持ち、実際のAchievementsごとにAchievementsを実装する予定です。各アチーブメントにはcheckAwardBadge関数があり、コントローラーから呼び出すことができます。また、そのルートを選択する必要がある場合は遅延ジョブ、またはユーザーが特定のバッジを獲得したかどうかを確認するためにいつでも呼び出すことができます。したがって、アチーブメントコードはすべて一元化されます。