论数据访问层设计技术及其应用

论数据访问层设计技术及其应用

摘要:在信息系统的开发与建设中,分层设计是一种常见的架构设计方法,区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性,使设计结构清晰,便于提高复用能力和产品维护能力。一种常见的层次划分模型是将信息系统分为表现层、业务逻辑层和数据访问层。信息系统一般以数据为中心,数据访问层的设计是系统设计中的重要内容。数据访问层需要针对需求,提供对数据源读写的访问接口;在保障性能的前提下,数据访问层应具有良好的封装性、可移植性,以及数据库无关性。

关键词:数据访问层,应用,接口,设计

On data access layer design technology and its application

Zhao Haobo

(Shijiazhuang Tiedao University, Shijiazhuang, 050043)

Abstract: In the development and construction of information systems, hierarchical design is a common architectural design method. The purpose of hierarchical design is to realize the idea of "high cohesion and low coupling". The hierarchical design can effectively simplify the system complexity, make the design structure clear, and improve the reuse ability and product maintenance ability. A common hierarchical model divides the information system into presentation layer, business logic layer and data access layer. Information systems generally take data as the center, and the design of data access layer is an important content in system design. The data access layer needs to provide the access interface for reading and writing data sources. On the premise of ensuring performance, the data access layer should have good encapsulation, portability and database independence.

Key words: Data access layer, application, interface, design

在当下时代,软件架构的设计中,数据访问层的设计使用愈加重要,数据访问层就是方便应用进行数据读写访问的抽象层,在该层上解决各个应用通用的访问数据库的问题。

1.数据访问层的含义和作用

数据访问层。无论你用的是什么开发模式或者是业务模式,到最后最必须具有持久化机制,持久化到持久化介质,并能对数据进行读取和写入CRUD。这就是数据访问层。数据访问层对其使用者来说有4个职责。首先,数据访问层需要将数据持久化到物理存储中,并为外界提供CRUD操作。其次数据访问层还能处理接受所有数据相关请求,数据访问层必须满足事务性的需求。最后,数据访问层也要合理地处理并发问题。

1.1 CRUD服务

CRUD服务是一系列的方法,负责将对象保存至关系型数据表,或从关系型数据表中读取数据并加载至新创建的应用程领域模型的类型实例。

  应该为实现CRUD服务编写怎样的代码呢?对于对象模型的每个类型,我们都要为其创建一个映射类,并实现一个接口。该接口中给出了该类型上所有数据库的相关操作。映射类内部可以使用ADO.NET或Linq To SQL来具体的实现。

1.2查询服务

  在某些情况下,我们会需要处理很复杂的查询,而且也不是所有查询都是一样的。有时我们会提取出一些通用的查询,在业务层和服务层的多个位置使用。

  更好的做法是将所有的硬编码,在业务层被多次使用的查询定义在仓储类中。此外,再定义一个通用的查询对象,能够以编程的方式配置并在执行时生成所需要的SQL代码。

  该查询对象的主要目的是通过对象的各个属性和方法收集数据,然后为数据库动态生成所需要的SQL代码。

  查询条件属于查询对象模式的应用,根据该模式,查询对象将定义成类,并包含一系列查询条件的集合。查询条件是一个简单的类,包含一个属性名,一个值,一个逻辑操作符,用来表明属性名和值之间的关系。

1.3 事务管理

  在一个设计良好的数据访问层中,应该有一种机制跟踪一个工作单元内对应用程序数据的所有修改,这样即可在稍后将这些修改一次性地持久化到数据库中保存。这个工作单元就是一个逻辑上的事务,它包括一系列的数据库调用。

  所以我们应该创建一个能够维护发生变化的领域对象列表的类。这个类同时也提供了事务的语义(开始,提交,回滚),配合数据库的物理事务将修改提交回数据库。

1.4 处理并发

  所以我们应在一个多用户环境中,与数据库离线操作会导致数据完整性的问题。用户A加载了产品1234的一个拷贝并更新了其描述,因为该操作属于一个较长的事务,我们可以假设该修改并没有立即提交。而同时,假设B也加载了1234的另一个拷贝,并更新了产品图片的URL。若用户B立即提交了它的修改,那么当用户A提交产品修改时,系统又该如何应对呢?

  你获取会说“这没问题呀”,因为两个用户更新了不同的字段。不过若是两个用户修改了相同的字段又该如何呢?很有可能第一个用户对产品的修改就这样丢失了,这通常叫做“最后写入者获胜”。

  乐观的并发处理意味着用户可以自由地尝试更新数据库中的任意记录,不过成功与否不能保证。若数据访问层发现即将要更新的记录已经被别人修改过,那么此次修改失败。

1.5 整合所有职责:数据上下文

  简而言之,你需要一个更高层次的类,用来表示并引导与底层存储介质的交互工作。随后,数据访问层的使用者就可以用该高层次的类作为存储介质的统一操作位置。ORM都有此高层次的类。

  这个可以统一访问数据访问层及其CRUD,事务和并发服务的高层次类通常叫做数据上下文(DataContext)。

2.数据访问层的设计

项目的数据访问层设计首先是进行数据访问层的各个子层(类)及其交互关系进行规划与设计;其次是通过对业务逻辑层接口的分析确定需要何种数据访问操作,从而确定数据访问层接口以及数据访问工厂接口;然后是编写数据访问辅助类,用于向数据实体操作子层提供数据库连接、数据库命令、事务、参数和连接字符串;最后是定义数据实体操作子层,即编写在各个数据访问层接口及数据访问工厂接口的实现类

2.1 数据访问层的规划与设计

规划与设计数据访问层的结构与类间关系是数据访问层设计与开发的首要任务,主要涉及到数据访问层的结构框架和类的定义与关系两大内容。因此,此阶段主要是根据业务逻辑层的接口定义和关系数据库表,确定数据访问层中的各个数据实体操作类,接口类和辅助类;然后是根据Factory模式划分各个子层(类)及其关系,并绘制数据访问层类图。。

2.2 数据访问接口子层的设计与实现

为了实现对底层数据库连接和操作的封装,提高软件代码的可移植性与统一性,往往需要定义数据实体操作类的接口以供业务逻辑层的调用,需要定义一个数据访问工厂类接口,以实例化数据实体操作类。因此,此阶段首先是根据业务逻辑所定义的操作来确定在任务一所定义各接口中的各个操作;

2.3 数据访问辅助类的设计与实现

由于业务逻辑层各个功能类模块对数据实体的访问基本类似,为减少代码量,提高代码复用性,可将一些复用的代码抽取出来,编写成助手类。因此,此阶段首先是定义数据访问辅助类中的公共操作方法,如获取数据库连接字符串、获取参数对象、执行指定SQL语句不返回结果以及执行指定SQL语句返回结果等操作;

2.4 数据实体操作类子层的设计与实现

由于接口只能声明,而不具体实现。也就是说接口不能通过以创建接口对象的形式来实现接口声明操作的功能,而必须通过继承自接口的类来实现接口中声明的所有操作。因此,此阶段首先是定义继承之接口的数据实体操作类;

3.结语

数据访问层就是方便应用进行数据读写访问的抽象层,在该层上解决各个应用通用的访问数据库的问题。数据访问层有着多重职责,所以对于数据访问层的设计格外重要,通过设计合适的数据访问层以实现减少代码量,提高代码复用性,对数据库等底层的操作简易化的功能,数据访问层的设计包含对接口子层的设计,辅助类的设计,实体操作类子层的设计等,数据访问层的应用也是同其职责相关,提供CRUD服务,处理并发,事务管理等多项应用。

 

参考文献:

[1]埃斯波西托,Microsoft .NET企业级应用架构设计》2010.6  

posted @ 2022-04-04 23:08  哦心有  阅读(481)  评论(0编辑  收藏  举报