入可以看作是控制反转的一个应用实例,我们可以把控制反转看作是一个原则。
下面我们来看看我们如何通过控制反正的方式来实现数据访问层的平滑迁移。当然我们知道,肯定是通过动态注入的方式来实现,当然目前主流的也有很多的IOC动
态注入框架,下面我们将会借助一些框架来说明如何实现这样的功能。
本文将以Enterprise Library5.0为例进行讲解动态注入的形式。我们先来看看配置文件的设置
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/FA122121426.png" />
我们来看看通过一个中间类去实现相应的注册代码:
- /// <summary>
- /// 用于动态完成代码注入的公共类
- /// </summary>
- public class IOCContainer
- {
- private static IUnityContainer container;
- private UnityConfigurationSection section;
- public void InitIOC()
- {
- container = new UnityContainer();
- section = (UnityConfigurationSection)System.Configuration.ConfigurationManager.GetSection("unity");
- section.Configure(container);
- }
- public static IDALInterface GetDAL()
- {
- return container.Resolve<IDALInterface>();
- }
- }
通过上述代码我们实现了,动态的创建数据访问层组件实例,下面我们来看看依赖注入的方式去完成相应的持久化的功能。我们来看看服务层的代码
- /// <summary>
- /// 测试服务层
- /// </summary>
- public class TestService
- {
- private IDALInterface DAL;
- public TestService(IDALInterface dal)
- {
- DAL = dal;
- }
- public void Save(Test test)
- {
- DAL.Create(test);
- }
- }
这里我们是采用构造函数注入的方式来实现数据访问层的动态注入的,当然除了构造函数注入,还有其他的方式,我们这里只是举例说明,一般来说依赖注入有
如下的几种形式
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/36122121561.png" />
具体的我这里就不举例说明了,大家可以网上查查有很多的例
子,我们平时也常用这些方式。
六、实现数据访问的四项原则
在第四节中我们讲解了数据访问层的四个原则,那么我们在自己的数据访问层中如何实现这几个原则呢,我想针对第一个原则持久化的原则,我们前面只是简单
的讲解如何实现数据库的独立性,下面我们先来看看持久化的操作,也就是我们说的CUD的操作,并不包括具体的查询服务,查询服务也是我们数据访问层必须提供四
个原则之一,我们后面都会讲解,我们先来看看CUD的实现。我们在做持久化服务的时候,一般情况下,我们会定义一个统一的数据访问层接口,然后提供持久化服
务,事务等等,通常有一些数据访问层共性的部分,我们都通过一个抽象类来实现,抽象类将实现接口中的部分功能,然后通过定义一些抽象成员函数,让具体的数据
访问层去实现相应的功能。我们这里以上节我们定义的IDALInterface为例讲解基类的简单实现。
我们将原来的接口层进行相关的优化操作将CUD操作单独抽取出来,通过ICUDMapper接口来定义
- /// <summary>
- /// 数据库持久化访问器
- /// </summary>
- public interface ICUDMapper
- {
- //CUD 持久化操作
- /// <summary>
- /// 创建新的对象
- /// </summary>
- /// <param name="model"></param>
- /// <returns></returns>
- int Create(object model);
- /// <summary>
- /// 更新对象
- /// </summary>
- /// <param name="model"></param>
- /// <returns></returns>
- int Update(object model);
- /// <summary>
- /// 删除对象
- /// </summary>
- /// <param name="model"></param>
- /// <returns></returns>
- int Delete(object model);
- }
然