Pregunta

He estado pensando en cómo implementar la función de insignia similar a SO en un nuevo sitio web. ¿Cuál es la mejor manera de almacenar los criterios para las insignias?

Dos ideas:

  • Todo código
  • 'Segundo sistema': cree una meta arquitectura para definir insignias y sus criterios. Almacene algo de información en la base de datos y haga que el código la consulte para descubrir las insignias y sus criterios.

¿Hay mejores formas?

¿Fue útil?

Solución

Normas.

Creas eventos en el sistema y usas reglas dentro de un procesador de transmisión de eventos.

Específicamente, digamos que tiene una insignia "realizada 10 publicaciones". No ejecuta "Seleccionar recuento (*) de publicaciones donde user =: usuario" para cada publicación. Más bien, tiene una regla simple que se observa cada publicación y "cuenta", almacena el estado de las reglas en el perfil del usuario.

De esa manera, "hizo 10 publicaciones" es tan barato como las publicaciones de "1,000,000".

Esto también hace que el sistema sea mucho más extensible.

Otros consejos

Estoy de acuerdo con Will en este caso.

Cree "eventos" en las páginas para que cada vez que ocurra un evento, es decir. Un usuario elimina una publicación, consultará el módulo del evento con el evento, digamos, event_user_delete_post y luego puede seleccionar ese evento y construir una consulta basada en él. Luego puede decidir si se otorga una insignia o no.

Esto mantendrá las dos lógicas separadas y mantendrá un diseño modular. Debería ser muy fácil de implementar de esta manera.

El único inconveniente es que si el evento no fue "capturado", entonces un usuario bien podría haber ganado un criterio de insignia, pero aún no ha sido recompensado. Sin embargo, esto nunca debería ocurrir. La única situación en la que puedo pensar es si la base de datos se manipula manualmente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top