的项目中肯能不让我们使用开源的通用框架,这时候我们可能就需要自己去实现这些数据访问层的具体细节。
当然数据访问层都必须能够将应用程序中的数据持久化到存储介质中,通常我们使用的数据都是关系型的数据库,但是我们知道我们在程序的开发中,通常采用的
模型都是对象模型,那么如何实现对象模型与关系模型直接的互相的转换就显得非常的重要。当然这是数据访问层的重要功能。通常来说,业务逻辑层及服务层不了解
数据库访问的具体细节,他们都需要通过数据访问层来实现数据的交互。一般来说在领域模型中,数据访问通常都是在服务层中进行调用的,而业务逻辑层并不关注数
据持久化,所以我们前面说的持久化透明的方式也是由此方式来实现。
上面我们啰嗦了一大堆,基本上说了数据访问层的基本需求功能:
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/E1122119216.png" />
下面我们来看看数据访问层的几个基本职责
首先、数据访问层应该提供基本的持久化操作CRUD的操作,我们知道数据访问层是唯一能操作数据库的一层,因为我们在设计时需要注意,系统的其他层不能
包含操作数据库的相关功能
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/E4122119456.png" />
这里我们通过类图可以看到,通过提供与类对应的数据库操作类来提供
相应的持久化操作方法,当然这不是唯一方式,可行的方式有很多。我们后面会详细讨论。
其次、应该提供能够满足类中信息的读取操作,一般情况下来说我们经常使用的是,根据主键查询某个对象的信息,或者是查询所有的记录,或者是根据条件返
回满足的集合。
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/8D122120862.png" />
当然我们这里定义的查询类可能是通用的形式,通过泛型的形式来做。但是我们知道
领域模型中肯定会有引用对象的情况,那么对于这样的情况我们如何来做呢?我们一般是通过延迟加载的形式来处理这样的要求,我们后面会依次讲解。我们来看看上
面的通用形式的简单代码格式:
- public class QueryHelper
- {
- /// <summary>
- /// 根据主键返回对象
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="key"></param>
- /// <returns></returns>
- public T GetObjectByKey<T>(object key)
- {
- return default(T);
- }
- /// <summary>
- /// 获取指定类型对象的总记录数
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="key"></param>
- /// <returns></returns>
- public int GetCount<T>(object key)
- {
- return 0;
- }
- /// <summary>
- /// 返回指定类型的所有对象集合
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- public List<T> GetAll<T>()
- {
- return new List<T>();
- }
- }
再次、数据库访问