トラッキングタイムはビジネスドメインモデルにおいて大変一般的な条件である。それが金融アプリケーション内のストックマーケットの履歴であるか、もしくは住宅ローンシステムのライフサイクル追跡であるかに関わらず、時間的なデータマネジメントはエンタプライズアプリケーションにおいて大切な設計の一部分である。
ErvaCon(サイト・英語)のBitemporalフレームワーク(サイト・英語)は、リッチドメインモデル内で時間に関連したデータ条件を提示するため、Temporal Patterns(source)を基盤にして設立されたオープンソースプロジェクトである。このフレームワークについてはSpringExperienceカンファレンス(source)においてErwin Vervate氏が行ったプレゼンテーション(source)においても論じられている。Bitemporalはコアドメインオブジェクトとバイテンポラルプロパティ(アドレス、名前、社会的地位等のあまり頻繁に変わらない要素)をHibernateのようなオブジェクト関連マッピング(ORM)を使用してオラクルのようなリレーショナルデータベース内で持続するために使用することができる。
プレゼンテーションでErwin氏はアプリケーション内で時間的なデータをマネージするための3つの方法を解説した。
- 非時間性:システム内で時間追跡がサポートされておらず、データは現時点での状況についてのみにしか答えられない。オラクルやマイクロソフトSQLサーバのようなリレーショナルデータベースは非時間性である。
- 単一時間性:実際的時間性と記録的時間性と呼ばれる二つの変数がある。実際的時間性はある事実が実際的な時間において有効な時に有効性インターバルをトラックに付加する。記録的時間性はある事実がシステム内で記録された時に記録性インターバルをトラックに付加する。これによってある特定の時間内でドメイ ンオブジェクトに関して知られている疑問に答える方法が提供される。
- バイテンポラル:このデザインアプローチは実際的時間性と記録的時間性変化追跡概念を統合している。他の時点では事実に関する、ある特定の時点で知られている事に関する疑問に答えるのを可能にする。このデザインはシステムが二つの時間インターバルを記録する必要があるので他の二つのオプションよりも複雑になっている。
Erwin氏は時間性データベースかもしくはカスタムコードを記述することによって、ドメインモデル内でバイテンポラリ性を実装するためのデザインオプションに関して論じている。時間性データベースは時間性データモデルと、SQLの時間性バージョンのような時間的側面をサポートする。TimeDB(サイト・英語)はオープンソースの時間性リレーショナルデータベース製品である。Orale FlashBack(サイト・英語)は記録性時間的機能をサポートするもう一つの時間性データベース製品である。Flashbackを使用しながらDBAはFLASHBACKキーワードを伴う シンプルなSQLステートメントを使用してテーブルかもしくは全体的なデータベースを過去の時点にリストアすることができる。FLASHBACK TABLEステートメントは取り消しセグメントから過去のテーブルイメージを読み取りフラッシュバッククエリを使用してテーブル列を再編成する。
カスタムコードに関しては、時間的な情報をデータベースに付加するための実装テクニックとして、テーブル内(validityFrom、 validityTo、 recordFrom、 and recordTo 行)に4つの追加分の行を付加する事である。時間ベースのシステムデザインの観点においてErwin氏は下記の事項を時間性変化を記録するためのキー要素 としてあげている。
- アイデンティティ
- 普遍性(プロパティ履歴に付加される新たな価値において変数結果を変更するという意味において時間性プロパティは普遍である。)
- 有効性&記録時間詳細
- 時間のコントロール
時間性パターンはアプリケーションアーキテクチャとデザインにおいて新たな概念ではない。Martin Fowler氏はこれらのパターンを自身のWebサイト(サイト・英語)"Patterns of Enterprise Application Architecture"(PoEAA)にて文書化している。Webサイトの時間性パターンセクションにはAudit Log(source)、Effectivity(source)、Temporal Property(source)、Temporal Object(source)、Snapshot(source)のようなパターンが含まれている。
バイテンポラルフレームワーク内のキーとなる重要なインターフェースはBitemporalTrace、Bitemporal、BitemporalProperty、WrappedBitemporalProperty、BitemporalWrapperとTimeUtilsである。そのフレームワークは日付時間操作ロジックを処理するためにJoda Time(source) APIを使用している。そのプロジェクトのソースコードはSubersionリポジトリ(source)からダウンロード可能となっている。