弥合对象/关系之间的鸿沟(二)—— O/RM的架构
弥合对象/关系之间的鸿沟(二)
O/RM的架构
从应用程序的视角看,O/RM有两个主要部分:持久性API和领域类。在Java中,API通常是Java社区流程的标准之一 ---Java持久性API,企业JavaBeans或Java数据对象——或尚未成为标准的流行API,例如TopLink或Hibernate。
使用标准的持久性API的一个优点是它允许项目作出晚部署项目数据库和持久性提供程序的决定。在项目开始时往往持久性提供程序所需要的功能并不明显,因此在许多项目中,允许作出晚部署的决定可以是一个选择使用它的重要的因素。
持久性API允许应用程序的程序员对数据库执行所有标准的CRUD(创建,检索,更新,删除)操作。由于应用程序的程序员不直接访问数据库中的行和列,一些速记符号会描述这些行为。例如,“持久化一个已被映射的领域类的实例”是“在数据库中创建一行或多行与映射到的领域类的实例中数据完全一致的记录。”同样,“删除一个领域类的实例”是指“删除数据库中与此领域类的实例完全对应的一行或多行记录。”
API包含持久化(映射后的领域类的)实例的方法,能够通过主要识别码来检索领域类的一个实例,能够根据领域类的值构建一个查询表达式来查找领域类及子类的所有实例,API还能够从数据库中删除领域类的一个实例。并且更新实例操作是在一个事务上下文中完成的,先检索一个领域类的一个实例,然后使用领域方法来修改此实例的值。
领域类以应用程序的视角表示存储在关系数据库中的数据,它通常是通过手工或使用工具从数据库架构生成。映射通常是需要声明的,表示领域对象模型与关系模式模型之间关联的映射在应用程序运行之前已经定义。既然领域类不必包含特定的持久性的行为,这些类通常被称为POJO(普通旧式Java对象)。
缺少持久性代码的情况下,允许持久化类的操作不依赖于持久性方面。因此,可以无需访问数据库或持久性环境来测试许多领域类的行为。这种编程风格鼓励关注点分离和封装。
许多表直接映射到领域类,如Employee, Department, Customer, Order, LineItem, Contract,Claim, Product,等等。这些表中的行映射到了领域类的实例。表中的列映射到了领域类的字段。
下一篇 阻抗不匹配?