«

»

Čvc
28

Abbildung 4: Zeitliche Objekte haben einen expliziten Versionsverlauf, sodass jede Änderung zu einer neuen Version führt. Wenn Sie nur über einige Eigenschaften von Objekten verfügen, die leicht zugängliche Zeitliche Informationen benötigen, können Sie die Temporal-Eigenschaft für diese Objekte verwenden. Der wesentliche Punkt der Temporal-Eigenschaft ist, dass Sie das offensichtliche Effektivitätsdatum entfernen, stattdessen verwenden Sie, was wie eine normale Eigenschaft aussieht, aber mit einem Accessor, der ein Datum als Argument verwendet. Auf diese Weise können Sie fragen, „was der Wert dieser Immobilie am 1. April 2000 ist“. Die zweite Vereinfachung erlaubt nur aktuelle Aktualisierungen. Eine aktuelle Aktualisierung lässt Änderungen am Datensatz nur mit einem Gültigkeitsdatum von heute zu. Im Allgemeinen können auch additive Veränderungen zu jedem Zeitpunkt in der Vergangenheit oder zukunft. Eine aktuelle Änderung erfordert überhaupt keine Datumsinformationen, sodass Sie über eine Schnittstelle für Aktualisierungen verfügen können, die vollständig nicht zeitlich ist. Wenn die Informationen zugänglicher sein müssen, dann müssen Sie ein wenig mehr daran arbeiten. Das häufigste Muster, das Menschen in dieser Situation verwenden, ist Effektivität. Dadurch wird ein Objekt einfach mit dem Zeitraum markiert, den es als gültig betrachtet (Abbildung 1).

Wenn Sie dann Ihre Objekte bearbeiten, verwenden Sie diesen Zeitraum, um das richtige Objekt zur richtigen Zeit zu erhalten. Die Essenz von Temporal Property ist diese Vorstellung von einem Accessor, der nach Datum parametriert wird, der es den Benutzern dieser Eigenschaft ersann, durch eine Reihe von Objekten mit Effektivität navigieren zu müssen. Daher schließen sich Temporal Property und Effectivity nicht gegenseitig aus. Sie können Adressverwendungsobjekte (mit Effektivität) verwenden, um eine Temporal Property-Schnittstelle zu implementieren. Wenn die Adressnutzungsobjekte andere Verantwortlichkeiten tragen, können Sie Methoden bereitstellen, die auf die Adressverwendungen für die Clients zugreifen, die diese anderen Verantwortlichkeiten benötigen, und eine Temporal Property-Schnittstelle für diejenigen, die dies bequemer finden. Die einfachste Möglichkeit, dieses Problem zu lösen, ist die Verwendung eines Überwachungsprotokolls. Hier geht es darum, Änderungen aufzuzeichnen, aber Sie erwarten nicht, dass Sie zurückgehen und es sehr oft verwenden. Daher möchten Sie, dass es einfach zu erstellen und minimal aufdringlich auf Ihre Arbeit sein. Wenn jemand es sich ansehen muss, dann erwarten Sie, dass er eine Menge Arbeit tun muss, um die Informationen auszugraben. Wenn sie es nicht sehr oft tun müssen und die resultierenden Informationen nicht schnell benötigen, dann ist das in Ordnung.

Wenn Sie eine Datenbank verwenden, ist sie kostenlos. Mit Textbereichen können Benutzer eine Adresse in einem beliebigen Format eingeben und das Kopieren und Einfügen von Adressen aus ihrer Zwischenablage vereinfachen. Ich finde den besten Weg, dieses Problem zu beschreiben, ist ein Beispiel. Stellen Sie sich vor, wir haben ein Lohnabrechnungssystem, das weiß, dass en Mitarbeiter eine Rate von 100 USD/Tag ab dem 1. Januar haben. Am 25. Februar führen wir die Lohnabrechnung mit diesem Satz aus. Am 15. März erfahren wir, dass sich der Tarif des Mitarbeiters mit Wirkung vom 15. Februar auf 211 USD/Tag geändert hat. Was sollten wir antworten, wenn wir gefragt werden, wie hoch der Satz für den 25.

Februar ist? Interessant wird es jedoch, wenn wir die Geschichte der Veränderungen aufzeichnen müssen. Wir wollen nicht nur den Zustand der Welt kennen, wir wollen auch den Zustand der Welt vor sechs Monaten kennen. Noch schlimmer ist es, dass wir vielleicht wissen wollen, was wir vor zwei Monaten vor sechs Monaten für den Zustand der Welt hielten. Diese Fragen führen uns in einen faszinierenden Boden zeitlicher Muster, die alle mit der Organisation von Objekten zu tun haben, die es uns ermöglichen, leicht Antworten auf diese Fragen zu finden, ohne unser Domänenmodell vollständig zu verheddern.