Najlepszy sposób przechowywania kryteriów odznaki?

Zastanawiałem się, jak zaimplementować funkcję badge podobną do SO na nowej stronie. Jaki jest najlepszy sposób przechowywania kryteriów dla odznak?

Dwa pomysły:

  • Cały kod
  • 'drugi system' - tworzenie meta architektury do definiowania odznak i ich kryteriów. Przechowuj niektóre informacje w bazie danych i poproś o zapytanie o kod, aby dowiedzieć się o odznakach i ich kryteriach.

Są lepsze sposoby?

Author: Ryan Doherty, 2009-02-07

2 answers

Zasady.

Tworzysz zdarzenia w systemie i używasz reguł wewnątrz procesora strumienia zdarzeń.

Konkretnie, powiedzmy, że masz odznakę "zrobił 10 postów". Nie uruchamiasz "select count ( * ) from posts where user =: user" dla każdego posta. Raczej masz prostą regułę, która obserwuje każdy post i "policz je", przechowując stan reguł w profilu użytkownika.

W ten sposób "made 10 posts" jest tak tanie, jak" made 1,000,000 " posts.

To również sprawia, że system znacznie bardziej rozszerzalny.

 39
Author: Will Hartung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-07 02:01:32

Zgadzam się z Willem w tej sprawie.

Utwórz "zdarzenia" na stronach tak, aby za każdym razem, gdy wydarzy się Zdarzenie, tj. użytkownik usuwa post, odpytuje moduł event Z event, powiedzmy, EVENT_USER_DELETE_POST, a następnie możesz wybrać to zdarzenie i zbudować zapytanie na jego podstawie. Następnie możesz zdecydować, czy odznaka zostanie przyznana, czy nie.

Dzięki temu dwie logiki będą rozdzielone i zachowają modułową konstrukcję. To powinno być bardzo łatwe do wdrożenia w ten sposób.

Jedynym minusem jest to, że jeśli wydarzenie nie zostało "przechwycone", wtedy użytkownik mógł również zdobyć kryteria odznaki, ale nie zostało jeszcze nagrodzone. Jednak nigdy nie powinno do tego dojść. Jedyną sytuacją, o której mogę myśleć, jest ręczne manipulowanie bazą danych.

 18
Author: Gary Green,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-07 02:15:46