Wie erstelle ich einen DB-basierten Regelsatz für das Web App-Erreichungssystem?

8

Ich plane ein Erfolgssystem für eine ASP.NET MVC-Site. Ich möchte, dass die Errungenschaften "Regeln" in einer Datenbank gespeichert werden - um leichter neue Errungenschaften hinzufügen zu können und um die bestehenden Regeln zu verwalten. Benutzer haben keinen Zugriff, um die Regeln zu ändern.

Wenn ein Benutzer eine Aktion ausführt, die möglicherweise einen Erfolg erzielen kann, werden die DB-Regeln abgefragt, und wenn Übereinstimmungen vorhanden sind, geben Sie ihnen die Erfolge (gespeichert in einer Nachschlagetabelle, (userId, achievementId, dateAwarded).

Im Moment plane ich, die "Trigger" auf bestimmte Aktionen im Controller zu setzen, aber der Code, der die Arbeit erledigt, wird im Modell sein.

Gibt es ein Standard-DB-Schema für ein Erfolgssystem, das dies bewirkt? Keine Notwendigkeit, das Rad neu zu erfinden, wenn nicht notwendig. Wenn nicht, welche Art von Problemen würden Sie sehen, worauf sollten Sie achten?

    
Chaddeus 21.07.2010, 03:40
quelle

1 Antwort

9

Sie finden diese Antwort hilfreich .

Aus Erfahrung ist der Aufbau einer datenbankbasierten Regel-Engine zur Reaktion auf Benutzeraktionen eine sehr zeitaufwendige, fehleranfällige und schmerzhafte Übung.

Stattdessen können Sie eine beliebige Anzahl einzelner Klassen schreiben, von denen jeder für die Vergabe einer bestimmten Leistung verantwortlich ist. Verwenden Sie eine Basisklasse oder eine Schnittstelle, um allen einen gemeinsamen Vertrag zu geben:

%Vor%

Sie können foreach für jeden AchievementAwarder und% code% für einen wiederkehrenden Zeitplan aufrufen. Zum Beispiel könnten Sie eine "100 Besuche" erreichen:

%Vor%

Dies löst zwei Probleme:

  1. Es ist um Größenordnungen einfacher, aber viel flexibler als eine Datenbank-basierte Regel-Engine. Wie Sie sehen können, sind die einzelnen Einheiten extrem klein und einfach zu ändern, ohne das größere System zu beeinflussen.

  2. Es kann asynchron ausgeführt werden. Bei Erfolgen, die eine gewisse Schwerfälligkeit erfordern, um festzustellen, ob sie vergeben werden sollten, werden die normalen Aktivitäten des Benutzers nicht von der Erreichbarkeits-Engine beeinflusst.

Rex M 21.07.2010, 03:52
quelle

Tags und Links