質問
私は、新しいWebサイトでSOに似たバッジ機能を実装する方法について考えてきました。バッジの基準を保存する最良の方法は何ですか?
2つのアイデア:
- すべてのコード
- 「2番目のシステム」 - バッジとその基準を定義するためのメタアーキテクチャを作成します。いくつかの情報をデータベースに保存し、コードをクエリしてバッジとその基準を把握します。
より良い方法はありますか?
解決
ルール。
システム内のイベントを作成し、イベントストリームプロセッサ内のルールを使用します。
具体的には、「10の投稿を作成した」バッジがあるとします。すべての投稿に対して「user =:user =:user "where where where where where where count(*)を選択しません。むしろ、各投稿が登場するのを監視し、「カウント」する簡単なルールがあり、ユーザープロファイルにルール状態を保存します。
そうすれば、「10の投稿」は「1,000,000の作られた」投稿と同じくらい安いです。
これにより、システムがはるかに拡張可能になります。
他のヒント
私はこれについてウィルに同意します。
ページに「イベント」を作成して、イベントが発生するたびに、つまり、「イベント」を作成します。ユーザーは投稿を削除し、イベントでイベントモジュールを照会します。たとえば、event_user_delete_postを使用してから、そのイベントを選択して、それに基づいてクエリを作成できます。その後、バッジが授与されるかどうかを判断できます。
これにより、2つのロジックが分離され、モジュラー設計が維持されます。この方法で実装するのは非常に簡単なはずです。
唯一の欠点は、イベントが「キャプチャされていない」場合、ユーザーがバッジ基準を獲得している可能性があるが、まだ報われていない可能性があることです。ただし、これは発生しないでください。私が考えることができる唯一の状況は、データベースが手動で操作されている場合です。