持久层的需求
文中对持久层提出了28条要求,几乎包括了所有的数据库操作,列出主题如下:
- 多种持久机制。(文本文件、关系数据库、对象-关系数据库、层次数据库、网络数据库、对象数据库等),本文主要讨论关系数据库。
- 对持久机制进行完整的封装。不必写任何其它关于持久层的代码,中需要发送save,delete,retrieve消息给一个对象。
- 基于条件的我多对象操作。支持根据一定条件同时返回(删除)多个对象的情况。
- 基于关联的多对象操作。
- 支持事务。
- 扩展性。你可以增加新的类或者属性,并且能容易的变更持久机制。
- 对象标识符。支持主键
- 组合键
- 多键
游标 - 评估结果集大小先确定有多少持久对象会被这个操作影响。
- 代理支持用一个标识代表一个对象,可减少开销。
- 记录支持返回记录而不是对象。
- 多种体系结构。
- 不同数据库版本和厂商
- 多连接
- 连接池
- 专用(native)和非专用驱动。如:ODBC、JDBC、第三方专用驱动等
- 语言绑定。
- 映射的灵活性。支持映射类层次结构有三种主要的方式。
- 生成数据库结构。。类似CASE工具
- 关系遍历。
- SQL查询。尽管在面向对象的代码中写SQL查询是对封装原则的公然背(这样会直接耦全应用程序与数据库结构),但是持久层还是要支持这种情况!(why? 性能!)
- 调用存储过程。虽然要避免使用难于移植的存储过程,但是偶尔还是要用到的。
- 缓冲区。
- 锁。可以指定使用悲观锁或者乐观锁
- 支持管理工具。运行于可被维护的元数据上。
- 运行时的配置。如:游标的大小、持久机制的名字/位置等。
总结:持久层应该使程序开发者不用关心它们的对象是如何存储的。另一方面:也允许DBA自由的修改数据库结构,而不用但心现有的B 程序引入bug。