Ich entwerfe ein Domänenmodell, in dem sich einige Entitäten im Laufe der Zeit weiterentwickeln, und ich muss eine historische Aufzeichnung ihres Zustands führen, die später abgerufen werden kann.
Ein vereinfachtes Beispiel:
Eine Kreditlinie stellt einen langfristigen Finanzierungsvertrag dar.
Jede Kreditlinie hat zugehörige Einheiten wie Finanzeinheiten, die an der Kreditlinie teilnehmen.
Die Der Status einer Kreditlinie zu einem bestimmten Datum wird durch eine Erklärung dargestellt, die ihre Bedingungen, teilnehmenden Unternehmen und ihre Beiträge enthält (alles kann sich im Laufe der Zeit ändern).
Kontoauszüge werden regelmäßig aus Dateien hochgeladen, und die Anwendung muss es Benutzern ermöglichen, den Kreditlinienstatus zu jedem beliebigen Datum anzuzeigen.
Ich kann keine SQL-Temporaltabellen verwenden, da das Kontoauszugsdatum aus der hochgeladenen Datei und nicht aus der Datenbankänderungszeit stammt.
Ich bin mir nicht sicher, wie ich diese zeitabhängigen Entitäten am besten modellieren und beibehalten kann. Mögliche Ansätze:
Option A – Nur die Snapshots behalten
Nur „CreditLineSnapshot“ (Kontoauszüge) beibehalten.
Jeder Snapshot enthält alle Attribute einer Kreditlinie zu einem bestimmten Datum. Es werden keine Daten wiederholt.
Nachteile:
- Keine persistente „CreditLine“-Entität: Snapshots müssen nach ID gruppiert werden, um beispielsweise die Liste der Kreditlinien zu erhalten.
- Alle Beziehungen zu anderen Entitäten werden in jedem Snapshot dupliziert, wie zum Beispiel der Eigentümer einer Kreditlinie, auch wenn sie sich im Laufe der Zeit nicht ändern.
Option B – Bestehende Entitäten und Snapshots
Sowohl CreditLine als auch deren Kontoauszug (der einen CreditLineSnapshot enthält) bleiben erhalten.
Nachteile:
- Attribute und Datenduplizierung: Der aktuelle Status ist sowohl in der Entität als auch in ihrem letzten Kontoauszug vorhanden (da alle Kontoauszüge gespeichert werden sollten)
Option C – Persist Entities mit stabilen Attributen + Snapshots mit variablen Daten
Behalten Sie „CreditLine“ nur mit stabilen Attributen (z. B. Id) bei und speichern Sie alle variablen Daten in seinen „Statements“.
Credit Line enthält alle Methoden außer nur dem ID-Attribut und seinen Anweisungen. Es delegiert die richtige Anweisung, um den Rest der Daten abzurufen und die gesamte Berechnung durchzuführen.
Das ist meine Lieblingsoption.
Was ist die beste Modellierungsstrategie oder gängige Praxis für diese Art von Domänen, in denen Entitäten einen sich über die Zeit entwickelnden Zustand haben, aber auch historische Versionen behalten müssen?
So modellieren und persistieren Sie Entitäten, deren Zustand sich im Laufe der Zeit ändert ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post
Mobile version