Planuję system osiągnięć dla strony ASP.NET MVC. Chcę, aby "reguły" osiągania były przechowywane w bazie danych - aby łatwiej było dodawać nowe osiągnięcia i centralne miejsce do zarządzania istniejącymi regułami. Użytkownicy nie będą mieli dostępu do zmiany zasad.Jak zbudować zestaw reguł opartych na DB dla systemu osiągnięć aplikacji WWW?
Gdy użytkownik wykonuje czynność, która może potencjalnie zarobić osiągnięciem, zasady db będą pytani a jeśli są mecze, dać im osiągnięcia (zapisane w tabeli przeglądowej (USERID achievementId, dateAwarded).
w tej chwili mam zamiar umieścić „wyzwalaczy” na pewnych działań w kontrolerze, ale kod, który wykonuje pracę będzie w modelu.
Czy istnieje standardowy schemat DB dla systemu osiągnięć który zezwoli na osiągnięcie Nie trzeba wymyślać koła, jeśli nie jest to konieczne, jeśli nie, jakie problemy mogą pojawić się, na co należy zwracać uwagę?
@Rex M - Brzmi świetnie! Dla przykładu, który dałeś, byłby to typ wyszukiwania cron. Jak poleciłbyś zahaczyć o działania, które podejmują użytkownicy? Na przykład, publikują nową "rzecz" i jest to setna, więc daj im osiągnięcie. Załóżmy również, że może istnieć dowolna liczba osiągnięć do opublikowania nowej "rzeczy". – Chaddeus
@Chad przepraszam za spóźnioną odpowiedź - aby odpowiedzieć na twoje pytanie, jak powiedziałeś, działa to najlepiej jako zadanie cron lub, w drugiej odpowiedzi, z którą się łączyłem, samoczynnie wstawiający obiekt pamięci podręcznej zainicjowany przy starcie aplikacji. Najlepszym rozwiązaniem dla wszystkich, ze względu na prostotę i wydajność, jest unikanie bezpośredniego połączenia z działaniami użytkownika, gdy tylko jest to możliwe. w wielu przypadkach znacznie lepiej jest żyć z kilkuminutowym opóźnieniem pomiędzy akcją, która popchnęła cię na drugą stronę a przyznaniem nagrody. –
@ Rex M - dzięki ... jak to robi Foursquare? Nie używam go, ale kiedy użytkownik odblokowuje odznakę, dostają go od razu? A może jest nagradzany później, gdy zadanie cron się rozejdzie? Zdecydowanie podoba mi się pomysł zachowania witryny! Właśnie dostałem stronę główną do załadowania w .48 sek.: D – Chaddeus