BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Bitemporal框架给富领域模型增加了时间维度

| 作者 Srini Penchikala 关注 36 他的粉丝 ,译者 宋玮 关注 0 他的粉丝 发布于 2008年1月19日. 估计阅读时间: 5 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

跟踪时间在业务模型领域是非常常见的需求。无论是跟踪一个金融应用程序中的股票市场的历史数据,还是跟踪一个抵押贷款系统中一笔贷款的生命周期,时间数据管理都是企业应用设计的一个重要部分。

来自ErvaConBitemporal框架是一个开源项目,它基于时态模式(Temporal Patterns)而创建,用来解决富领域模型中的时间相关数据的需求。最近Erwin Vervaet在SpringExperience大会上的ppt演示对该框架进行了讨论。Bitemporal可以用来把核心领域对象及其双时态属性(例如地址、名字、社会地位等这些不会过于频繁发生变化的属性),通过对象关系映射(ORM,如Hibernate)持久化到关系数据库(如Oracle)中。

在该ppt中,Erwin解释了在应用程序中管理时间数据的三个不同的方式:

  • 无时态(Non-temporal):在系统中没有时间跟踪支持,数据只能回答关于当前情况的问题。关系数据库如OracleMicrosoft SQL Server是无时态的。
  • 单时态(Single-temporal):有两个变体,分别叫做实际时态(actual-temporal)和记录时态(record-temporal)。实际时态用“有效时间区间”来跟踪在实际的时间内某一事实何时是有效的。记录时态用“记录时间区间”来跟踪某一事实何时被记录到系统中。由此系统可以回答在某一特定时间点,它知道领域对象的什么信息的问题。
  • 双时态(Bi-temporal):这一设计方法组合了实际时态和记录时态这两种变更跟踪概念。它使系统可以回答在某一特定时间点,对于在另一时刻的事实,系统知道什么的问题。该设计比其它两个选项更复杂,因为系统将不得不跟踪两个时间区间。

Erwin讨论了在领域模型中实现双时态(bi-temporality)的设计选择:使用一个时态数据库(Temporal Database)或编写自己的代码。时态数据库(Temporal Database)支持时态数据模型和时态版的SQL。TimeDB是一个开源时态关系数据库产品。Oracle FlashBack是另一个时态数据库产品,支持记录时态特性。使用Flashback,DBA们可以恢复一个表或整个数据库到某一时间点(使用简单的带有FLASHBACK关键字的SQL语句)。FLASHBACK TABLE语句从undo段读取表的过去的映像,并使用flashback查询重新构造该表的行。

关于自定义代码,给数据库增加时间信息的实现技术是在表中增加4个附加列(validityFrom、validityTo、recordFrom和recordTo列)。谈及基于时态的系统设计,Erwin罗列了以下几个时态变更跟踪的关键方面:

  • 同一性(Identity)
  • 不变性(Immutability )(时间属性在这样的意义下是不变的:改变值导致一个新的值被增加到属性历史中。)
  • 有效性和记录时间细节
  • 控制时间

时态模式在应用程序架构和设计中不是一个新的概念。Martin Fowler在他的“Patterns of Enterprise Application Architecture”网站上做了详细叙述。该网站的时态模式部分包含了如Audit LogEffectivityTemporal PropertyTemporal ObjectSnapshot

Bi-temporal框架中的关键接口和类有:BitemporalTrace、Bitemporal、BitemporalProperty、WrappedBitemporalProperty、BitemporalWrapper以及 TimeUtils。该框架使用了Joda Time API来处理日期时间操作逻辑。该项目的源代码可以从他们的Subversion库中下载。

 

查看英文原文:Bitemporal Framework Adds Time Dimension To Rich Domain Models

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT