Estoy planeando un sistema de logros para un sitio ASP.NET MVC. Quiero que las "reglas" de logro se almacenen en una base de datos, para que sea más fácil agregar nuevos logros y un lugar central para administrar las reglas existentes. Los usuarios no tendrán acceso para cambiar las reglas.¿Cómo construir un conjunto de reglas basado en DB para el sistema de logro de la aplicación web?
Cuando un usuario realiza una acción que potencialmente podría ganar un logro, las reglas db se consultará y si hay coincidencias, les dan los logros (almacenados en una tabla de consulta, (ID de usuario, achievementId, dateAwarded).
por el momento tengo la intención de poner los "disparadores" en ciertas acciones en el controlador, pero el código que hace el trabajo habrá en el modelo.
¿hay esquema de base de datos estándar para un sistema de logros que lleva a cabo esto no es necesario reinventar la rueda si no es necesario. Si no, ¿qué tipo de problemas crees que aparecerían, qué buscar?
@Rex M - Eso suena genial! Para el ejemplo que le dio sería un tipo de búsqueda de cron job. ¿Cómo recomendaría engancharse en las acciones que los usuarios toman? Por ejemplo, publican una nueva "cosa" y es la centésima, así que deles un logro. También suponga que podría haber cualquier cantidad de logros para publicar una nueva "cosa". – Chaddeus
@C. Lo siento por la respuesta tardía: para responder a su pregunta, como dijo, esto funciona mejor como un trabajo cron o, en la otra respuesta a la que he vinculado, un objeto de caché autoinstruible inicializado al inicio de la aplicación. Su mejor apuesta, por simplicidad y rendimiento, es evitar conectarlo directamente a las acciones del usuario siempre que sea posible. en muchos casos, es mucho mejor vivir con unos minutos de retraso entre la acción que te empujó al límite y el premio otorgado. –
@ Rex M - gracias ... ¿cómo lo hace Foursquare? No lo uso, pero cuando un usuario desbloquea una insignia, ¿lo obtienen de inmediato? ¿O es otorgado más tarde cuando el trabajo cron rueda? ¡Definitivamente me gusta la idea de mantener el rendimiento del sitio! Acabo de cargar la página de inicio en .48 seg.: D – Chaddeus