33 votes

La meilleure façon de conserver les critères de l'insigne ?

J'ai réfléchi à la manière de mettre en œuvre une fonction de badge similaire à celle de SO sur un nouveau site web. Quelle est la meilleure façon de stocker les critères pour les badges ?

Deux idées :

  • Tous les codes
  • Second système" - créer une méta architecture pour définir les badges et leurs critères. Stockez des informations dans la base de données et demandez au code de les interroger pour déterminer les badges et leurs critères.

Y a-t-il de meilleurs moyens ?

37voto

Will Hartung Points 57465

Règles.

Vous créez des événements dans le système et utilisez des règles dans un processeur de flux d'événements.

Plus précisément, disons que vous avez un badge "a publié 10 messages". Vous ne lancez pas "select count(*) from posts where user = :user" pour chaque message. Au lieu de cela, vous avez une règle simple qui regarde chaque message qui passe, et les "compte", en stockant l'état des règles dans le profil de l'utilisateur.

De cette façon, "avoir fait 10 messages" est aussi bon marché que "avoir fait 1.000.000" messages.

Cela rend également le système beaucoup plus extensible.

18voto

Gary Hole Points 9736

Je suis d'accord avec Will sur ce point.

Créez des "événements" sur les pages de sorte que chaque fois qu'un événement se produit, par exemple un utilisateur supprime un message, le module d'événement sera interrogé avec l'événement, disons, EVENT_USER_DELETE_POST et ensuite vous pouvez sélectionner cet événement et construire une requête basée sur lui. Vous pouvez alors décider si un badge est attribué ou non.

Cela permettra de séparer les deux logiques et de conserver un design modulaire. Il devrait être très facile à mettre en œuvre de cette façon.

Le seul inconvénient est que si l'événement n'a pas été "capturé", un utilisateur peut très bien avoir gagné un critère d'insigne mais il n'a pas encore été récompensé. Cependant, cela ne devrait jamais se produire. La seule situation à laquelle je peux penser est celle où la base de données est manipulée manuellement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X