【正确答案】在层次式架构风格中,数据访问层(数据持久层)主要负责和应用中的各种数据源(如DB2、Oracle等关系型数据源、XML数据及其他类型的非关系型数据、Web服务,以及各种特别的遗留系统等)打交道,并将它们整合起来,为业务逻辑层提供统一的数据服务。架构师在不同的应用场合下可能会选择不同的数据访问模式,并且还会不断地推陈出新,这里不会也不可能穷尽所有的数据访问模式,而只是列举了其中最为典型的几个。在线访问模式、Data Access Object模式、Data Transfer Object模式、离线数据模式,以及对象/关系映射(Object/Relation Mapping)模式是数据访问层设计中典型的数据访问模式。各种数据访问模式的说明如表2—15所示。
表2-15各种数据访问模式
|
| 数据访问模式 | 说明 |
| 在线访问模式 | 是最基本和最常用的数据访问模式,该数据访问模式会占用一个数据库连接,读取数据,每个数据库操作都会通 过这个连接不断地与后台的数据源进行交互 |
| DAO模式 | 是标准J2EE设计模式之一,常用这种模式将底层数据访问操作与高层业务逻辑分离开。一个典型的DAO实现 通常有以下组件:①一个DAO工厂类;②一个DAO接口;③一个实现了DAO接口的具体类(包含访问特定数据 源的数据的逻辑);④数据传输对象(或称为值对象) |
| DTO模式 | 是经典EJB设计模式之一。DTO本身是这样一组对象或是数据的容器,它需要跨不同的进程或是网络的边界来 传输数据。这类对象本身应该不包含具体的业务逻辑,并且通常这些对象内部只能进行一些诸如内部一致性检查和 基本验证之类的方法,而且这些方法最好不要再调用其他的对象行为 |
| 离线数据模式 | 以数据为中心:数据从数据源获取之后,将按照某种预定义的结构(如SDO中的Data图表结构、ADO.NET中 的关系结构)存放在系统中,成为应用的中心;离线:对数据的各种操作独立于各种与后台数据源之间的连接或是 事务;与XML集成:离线数据集所维护的数据可以方便地与XMI。格式的文档之间互相转换;独立于数据源:该模 式的不同实现定义了数据的各异的存放结构和规则,这些都是独立于具体的某种数据源的 |
| O/R映射 | 其指导思想来源于这样一种现实:大多数应用中的数据都是依据关系模型存储在关系型数据库中;很多应用 程序中的数据在开发或是运行时则是以对象的形式组织起来的。O/R映射就提供了这样一种工具或是平台,能够 帮助将应用程序中的数据转换成关系型数据库中的记录;或是将关系数据库中的记录转换成应用程序中代码便于 操作的对象 |
|
依题意,在网上书城系统应用中,第1个系统需求是用户根据检查条件查询相关的书目,返回符合条件的书目列表(可能内容非常多,数据量较大),而且可能每次查询的内容都不一样。通常,针对用户书目查询这一业务应用,如果查询返回的数据量并不是很大,同时也不频繁,则可以考虑采用在线访问的模式;如果返回的数据量较大(比如返回众多符合条件的书目并且分页显示)而且较为频繁,则需要考虑在线访问模式和离线数据模式相结合,通过离线数据的缓存来提高查询性能。
第2个系统需求是网站管理员可能需要批量对相关书目信息进行修改,并且需要将更新的信息返回至数据库。此类数据应用的特点表现为,与数据库交互的次数并不频繁,但是每次操作的数据量相对较大;同时,也希望能够使得本地操作有较好的交互体验。针对这种应用情况,往往适合采用离线数据访问的模式,DTO模式也是不错的选择。如果该网上书城应用系统采用的是IBM WebSphere平台,则可以使用SDO技术,或者使用Java中的CachedRowSet技术;如果采用的是基于微软的应用系统平台,则可以采用ADO.NET技术。
第3个系统需求是一个关于“多用户并发访问”的需求,如何让网上书城应用系统能够处理大规模的并发用户访问是一个很复杂的问题,涉及应用的架构、采用的软件、相应的配置和应用程序的调优等方面的问题。对于数据访问层设计,一个常见的方法是使用连接池的模式,以便能够处理更多的用户请求。如果在网上书城应用系统中使用了IBM WebSphere Application Server(或BEA WebLogic、Tomcat等)应用服务器,则这些应用服务器都提供了连接池的机制。
第4个系统需求是一个关于“整合异构数据源”的需求,因为有了新的、不同类型的数据库系统的加入,需要和旧的数据库系统进行整合。后台数据系统种类繁多,配置复杂的情况是随处可见的。可能这个网上书城在刚刚起步的时候只是用了MS SQL Server 2000来作为后台数据源。后来随着业务的增加,又有了新的Oracle(或DB2)系统。除此之外,可能还有很多诸如XML文档等需要和已有的系统集成起来,这些都是令人头痛的问题。在很多实际项目中,经常需要软件开发公司花很大的力气开发一些导入/导出工具来集成此类数据,而现在已经有了专门的产品来完成这些任务。例如,IBM WebSphere InformationIntegration等产品就可以用来支持各种关系型数据源及非关系型数据源的数据整合。