Ich werde ein einfaches Kreditsystem schreiben, das der Benutzer " hinzufügen ", " Abzüge " im System hinzufügen kann. Momentan denke ich über zwei Ansätze nach.
Einfacher: Speichern Sie das Guthaben des Benutzers als balance
in der Datenbank, und alle Aktionen ("hinzufügen", "abziehen") werden protokolliert, aber nicht zur Berechnung des letzten Guthabens verwendet.
Geschichte basiert: Speichern Sie das Konto nicht in der Datenbank. Das Guthaben wird berechnet, indem die Geschichte der Transaktionen betrachtet wird, z. ("hinzufügen", "abziehen")
Beide Fälle würden funktionieren, denke ich, aber ich sehe nach, ob irgendwelche Vorbehalte beim Entwurf eines solchen Systems bestehen, insbesondere bevorzuge ich das System History based
.
Oder gibt es eine Referenzimplementierung oder ein Open-Source-Modul, das ich verwende?
Update: Oder gibt es irgendein Ruby / Rail-basiertes Modul wie AuthLogic
, so dass ich meinen bestehenden Code anschließen und abspielen kann, ohne das Rad neu zu erfinden (z. B. Transaktion, Rollback, Sicherheit usw.)?
Benutze beides.
Der balancierte Weg gibt Ihnen schnellen Zugriff auf den aktuellen Betrag.
Der verlaufsbasierte Weg gibt Ihnen Auditing. Die History-Tabelle sollte die Transaktion (wie Sie beschreiben), einen Zeitstempel, den Saldo vor der Transaktion und idealerweise eine Möglichkeit, die Quelle / das Ziel des Fonds zu verfolgen, speichern.
Siehe Ruby Toolbox für die Buchhaltung und Plutus doppelte Buchführung Juwel .
Wenn sich Ihr Kreditsystem auf die Benutzer auswirkt, empfehle ich außerdem, die Protokollierung zu verwenden und idealerweise über die sichere Protokollverifizierung und die nachweisbare Zeitstempelverkettung zu lesen.
Einzelheiten zur Protokollierung finden Sie unter: Techniken zur Sicherstellung Überprüfbarkeit von Ereignisprotokolldateien .
Für Open-Source-Code, der Kredit macht, möchten Sie vielleicht prüfen: Ссылка
Das Hinzufügen und Abziehen von Credits bedeutet, dass Sie möglicherweise auch wissen müssen, woher diese Credits stammen und wohin sie gegangen sind. Jedes Mal, wenn Sie in eine Situation wie diese geraten, ob es sich um eine Währung oder eine andere numerische Menge handelt, die nachverfolgt und abgerechnet werden muss, sollten Sie ein doppeltes Buchführungsschema verwenden.
Dieses Muster hat seit Jahrhunderten funktioniert und bietet Ihnen alle Funktionen, die Sie benötigen, um zu sehen, was Ihre Bilanzen sind und wie sie so aussehen:
Wenn Sie mit den Details nicht vertraut sind, beginnen Sie hier: Double Entry Bookkeeping oder fragen Sie jemanden, der hat einen Einführungskurs in Buchhaltung gemacht.
Sie haben nach einer Open-Source-Lösung von Ruby on Rails gefragt, die Sie an Ihre Anwendung anschließen können. Sie können Plutus verwenden. Hier ist ein Auszug aus der Beschreibung dieses Projekts auf Github:
Das Plutus-Plugin bietet ein komplettes System für die doppelte Buchführung zur Verwendung in jeder Ruby-on-Rails-Anwendung. Das Plugin folgt allgemein Doppelte Buchhaltungspraktiken. ... Plutus besteht aus Tabellen, die Pflegen Sie Ihre Konten, Buchungen, Lastschriften und Gutschriften. Jeder Eintrag kann Habe viele Abbuchungen und Gutschriften. Die Eingabetabelle, die Ihre Daten aufzeichnet Geschäftstransaktionen ist im Wesentlichen Ihre Buchhaltung Journal.
ja, benutze beides.
Manchmal müssen Sie mehrere Transaktionen unter einem Dach vereinen. Ich schlage vor, eine dritte Tabelle mit dem Namen 'Tokens' zu erstellen, die als Zahlungsmanager fungiert und diese gruppierten Transaktionen unter diesem Token vereinheitlicht.
token.transactions = (Wählen Sie * aus Transaktionen t, wobei t.token="123") zum Beispiel
Tags und Links ruby ruby-on-rails design-patterns database-design software-design