2009-02-07 7 views
33

Ho pensato a come implementare la funzione di badge simile a quella di SO su un nuovo sito web. Qual è il modo migliore per memorizzare i criteri per i badge?Il modo migliore per memorizzare i criteri Badge?

due idee:

  • Tutto il codice
  • 'secondo sistema' - creano una meta un'architettura per la definizione di scudetti e loro criteri. Memorizza alcune informazioni nel database e chiedi al codice di interrogarle per capire i distintivi e i loro criteri.

Ci sono modi migliori?

risposta

37

Regole.

È possibile creare eventi nel sistema e utilizzare le regole all'interno di un processore del flusso di eventi.

In particolare, supponiamo di avere un badge "fatto 10 post". Non esegui "select count (*) dai post dove utente =: user" per ogni post. Piuttosto, hai una semplice regola che controlla ogni post e "contali", memorizzando lo stato delle regole nel profilo utente.

In questo modo "fatto 10 post" è economico come "fatto 1.000.000" post.

Questo rende inoltre il sistema molto più estensibile.

+9

Se segui questo percorso, fai attenzione ai casi in cui aggiungi un nuovo badge e devi analizzare ciò che gli utenti esistenti avrebbero dovuto già guadagnare. –

+0

Sì, assolutamente uno svantaggio del sistema, ma è ancora più flessibile e scalabile in quanto (in genere) l'aggiunta di nuovi badge avviene molto meno che testarli e premiarli. –

+0

Quindi, come gestiresti l'aggiunta di badge lungo la strada? Diciamo che ho un nuovo badge come il badge "woot" che SO ha aggiunto. Come lo renderesti retroattivo? – Micah

18

Sono d'accordo con Will su questo.

Creare "eventi" sulle pagine così ogni volta che si verifica un evento, ad es. un utente elimina un post, interrogherà il modulo eventi con l'evento, diciamo, EVENT_USER_DELETE_POST e quindi potrai selezionare quell'evento e creare una query basata su di esso. Puoi quindi decidere se un badge è assegnato o meno.

Ciò manterrà le due logiche separate e manterrà un design modulare. Dovrebbe essere molto facile da implementare in questo modo.

L'unico svantaggio è che se l'evento non è stato "catturato", allora un utente potrebbe aver guadagnato un criterio distintivo ma non è stato ancora premiato. Tuttavia, questo non dovrebbe mai verificarsi. L'unica situazione che posso pensare è se il database viene manipolato manualmente.