数据层的具体代码我这里就不一一的定义贴出来了,因为每种不同的数据库类型就要分别实现,我们这里讲解2中不同类型的实现思路吧,
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/21122121155.png" />
我们这里讲解2中实现动态创建具体数据访问组件的方式,我们先来讲讲插件模式。
插件模式
插件模式:插件模式就是通过外部配置文件中读取要创建的组件的类型信息,然后调用组件服务,插件模式的关键点就是服务不会与具体实现联系起来,在我们的
分层结构中的解释就是,服务层中调用数据访问层中的组件服务,服务层不关系具体的调用方式,服务层只关心服务。而具体的数据访问组件是通过配置文件来动态的
创建,当然这就需要使用.NET中的反射的功能。我们来看个图形画的描述:
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/98122121553.png" />
反射工厂通过读取配置文件中具体的数据配置项及数据访问的具
体服务组件类型,通过反射工厂来动态的创建,好了我们来看看实例代码及配置文件。
- <?xml version="1.0" encoding="utf-8" ?>
- <Connection>
- <ConnectionItem key="connectionString"
- value="Data Source=.SQLEXPRESS;Initial Catalog=EasyStore;User ID=sa;Password=123456" />
- value="Data Source=.SQLEXPRESS;Initial Catalog=EasyStore;User ID=sa;Password=123456" />
- <DALType key="DALType"
- value="DAL.SQLServer" />value="DAL.SQLServer" />
- <Assembly key="Assembly "
- value="DAL.SQLServer" />value="DAL.SQLServer" />
- </Connection>
上面的配置文件中的ConnectionItem 节点中配置了数据库访问的链接字符串,DALType 定义了数据访问层组件的类型。我们下来看看反射工厂的示例代码实
现。
- public class DALHelper
- {
- private static IDALInterface instance;
- public static IDALInterface GetDAL()
- {
- string assambly = XmlHelper.getVlaue("Assembly");//这里应该是自定义的读取XML节点的方式
- string type = XmlHelper.getVlaue("DALType");
- Assembly asm = Assembly.Load(assambly);
- instance = (IDALInterface)asm.CreateInstance(type);
- return instance;
- }
- }
我们接下来看看如何使用这个数据访问层去实现相应的持久化操作:
- public class TestService
- {
- private IDALInterface DAL;
- public TestService()
- {
- DAL = DALHelper.GetDAL();
- }
- public void Create(Test test)
- {
- //相应的判定操作
- //创建对象
- DAL.Create(test);
- }
- }
这样就实现了在服务层对数据访问层的调用操作,这里是通过接口调用的方式来实现。我们再来看看控制反转的实现方式吧。
控制反转
控制反转我们在设计规范与原