Ich würde es anders machen. Ich würde den Startkilometerstand in der Datenbank speichern, und ich würde speichern, wie viele Kms (oder Meilen) die Fahrt dauerte:
START | TRIP | FUEL
60000 | 5000 | 5.0
65000 | 15000 | 15.0
Dann Sie diese als Java-Klasse haben würde:
public class FuelLog {
private double start;
private double trip;
private double fuel;
}
Dies ist die gleiche Technik, die normalerweise für die Aufzeichnung von Geldtransaktionen für Bankkonten verwendet wird. Das einzige Problem ist, dass Sie sicherstellen müssen, dass "Start" immer gleich dem vorherigen Start + vorherige Reise ist, um Lücken und/oder Inkonsistenzen zu vermeiden.
Die Idee ist, dass eine Instanz dieser Klasse nicht davon abhängen sollte, dass andere Instanzen eine gültige Instanz sind.
Eine andere mögliche Lösung, die ich in diesem Fall nicht für gültig halte, wäre, die "Sequenznummer" im Protokoll als Index zu speichern. Zum Beispiel:
START | TRIP | FUEL | INDEX
60000 | 5000 | 5.0 | 1
65000 | 15000 | 15.0 | 2
Dann würden Sie eine Java-Klasse haben, die eine Sammlung von FuelLog
enthält, als eine indizierte Liste in Hibernate abgebildet:
public class Car {
private List<FuelLog> fuelLog;
public double getFuelEconomy(FuelLog log){/* your implementation goes here */}
}
Car
würde dann derjenige sein, der verantwortlich um den Kraftstoffverbrauch für einen bestimmten Protokolleintrag zu berechnen, da er auf die vorherigen Protokolleinträge zugreifen kann. Aber dann würden Sie die fuelEconomy
in Ihrem FuelLog
nicht haben.
Das gab mir ein paar gute Tipps. Ich kann die Berechnung vorerst in die Service-Schicht legen. Ich bin nicht verrückt nach etwas auf dem Einsatz zu berechnen, da ich am Ende viele Zeilen neu berechnen müsste, abhängig davon, was geändert wurde. Scheint Raum für Fehler zu lassen, da mein DB-Zustand von meiner App abhängig sein würde. Der zweite Ansatz ist besser, aber ich würde es bevorzugen, wenn mein Auto die Innereien von FuelLogs nicht bemerkt. Vielleicht könnte ich auf meinem SQL auffrischen und einen Trigger erstellen. –