9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

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

  • 2008-01-18
  • 本文字数:1325 字

    阅读完需:约 4 分钟

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

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

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

  • 无时态(Non-temporal):在系统中没有时间跟踪支持,数据只能回答关于当前情况的问题。关系数据库如 Oracle Microsoft 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 Log Effectivity Temporal Property Temporal Object Snapshot

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

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

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2008-01-18 02:26999
用户头像

发布了 150 篇内容, 共 41.7 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

食堂就餐卡系统设计

泛岁月的涟漪

食堂就餐卡系统设计

作业一:食堂就餐卡系统设计

梦行

极客大学架构师训练营

week1-食堂就餐卡系统

张健

食堂就餐卡

架构师训练营-作业1-食堂就餐卡系统设计

紫极

极客大学架构师训练营 架构文档

架构师训练营 第一周总结

netbanner

极客大学架构师训练营

架构师训练营第一周-总结

无心水

极客大学架构师训练营 UML

练习1-1

闷骚程序员

架构师训练营-week1-学习总结

暖丶冬

架构师训练营第一周心得

努力努力再努力m

极客大学架构师训练营

食堂就餐卡系统设计

小遵

架构师训练营第一周学习总结

梦行

极客大学架构师训练营

week1.学习总结

个人练习生niki👍

食堂就餐卡系统设计

拈香(曾德政)

架构设计 极客大学架构师训练营

学习总结

nihuihua

架构师学习第一周作业

云峰

食堂就餐卡系统设计

呱呱

极客大学架构师训练营 作业

架构师训练营-学习笔记-第一周

superman

学习 极客大学架构师训练营

架构师和架构

拈香(曾德政)

架构师 极客大学架构师训练营

Week 01 作业:食堂就餐卡系统设计

鱼_XueTr

架构师训练营 - 学习总结 - 第一周

桔子

week1作业

数字

第二课 以图服人

Geek_bobo

食堂就餐系统架构设计(训练营第一课)

看山是山

极客大学架构师训练营 UML 食堂就餐系统

食堂就餐卡系统设计

molingwen

极客大学架构师训练营

第一周总结

王志祥

极客大学架构师训练营

Homework-食堂就餐卡系统设计

River Tree

架构设计 Homework

【总结】架构师要做什么

孙野

食堂就餐卡系统设计

史慧君

学习总结-架构师训练营-第一周

走过路过飞过

week1-学习总结

张健

  • 扫码添加小助手
    领取最新资料包
Bitemporal框架给富领域模型增加了时间维度_Java_Srini Penchikala_InfoQ精选文章