Лучший способ хранить критерии Badge? - PullRequest
33 голосов
/ 07 февраля 2009

Я думал о том, как реализовать функцию бейджей, аналогичную SO на новом веб-сайте. Каков наилучший способ хранения критериев для значков?

Две идеи:

  • Весь код
  • «Вторая система» - создание мета-архитектуры для определения значков и их критериев. Сохраните некоторую информацию в базе данных и запросите код для определения значков и их критериев.

Есть ли лучшие способы?

Ответы [ 2 ]

37 голосов
/ 07 февраля 2009

Правила.

Вы создаете события в системе и используете правила в процессоре потока событий.

В частности, скажем, у вас есть значок "сделал 10 сообщений". Вы не запускаете "select count (*) из сообщений, где user =: user" для каждого сообщения. Скорее, у вас есть простое правило, которое отслеживает каждое сообщение и «подсчитывает их», сохраняя состояние правил в профиле пользователя.

Таким образом, «сделал 10 сообщений» так же дешево, как «сделал 1 000 000» сообщений.

Это также делает систему намного более расширяемой.

18 голосов
/ 07 февраля 2009

Я согласен с Уиллом в этом вопросе.

Создайте «события» на страницах, чтобы каждый раз, когда событие происходит, т.е. пользователь удаляет сообщение, он запрашивает у модуля события событие, скажем, EVENT_USER_DELETE_POST, а затем вы можете выбрать это событие и построить запрос на его основе. Затем вы можете решить, будет ли награжден значок или нет.

Это позволит разделить две логики и сохранить модульную конструкцию. Это должно быть очень легко реализовать таким образом.

Единственным недостатком является то, что если событие не было «захвачено», то пользователь вполне мог заработать критерий значка, но он еще не был вознагражден. Однако этого никогда не должно происходить. Единственная ситуация, о которой я могу думать, - это если база данных обрабатывается вручную.

...