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