积极答复者
DALfactory层有什么作用?

问题
-
using System; using System.Collections.Generic; using System.Text; using System.Reflection; namespace DALFactory { public class Orders_Factory { static readonly string path = System.Configuration.ConfigurationManager.AppSettings["DAL"]; public static IDAL.OrdersDal Createusers() { string classname = path + ".sql_Orders"; return (IDAL.OrdersDal)Assembly.Load(path).CreateInstance(classname);//不明白这句话的意思? } } }
答案
-
代码的意思是使用反射加载程序集,创建加载的程序集里面的类型。
还需要理解的是这种设计模式。
首先是分层(Layering),分层可以使应用程序的架构比较清晰,一般来说最常见的方式可以分为三层:表现层、逻辑层和数据层。
DAL顾名思义就是数据层了,逻辑层负责取得数据,然后为表现层提供接口(广义的接口,不仅仅是指Interface),表现层就从逻辑层的接口获取数据进行显示即可。
Factory的意思是工厂,这里是另外一个设计模式:工厂模式。
工厂就是提供流水线制造的地方,可以生产出一系列相同相似的产品。在这里是为了创建适应不同数据库(SQL Server, Oracle, Mysql)的DAL。
最后再讲讲反射,为什么要在这里通过反射来创建DAL?原因是为了:松散耦合。可以看到,如果我们换了一个数据库,比如之前是MS SQL Server,现在要用Oracle了,他们底层的一些操作是不一样的,我们已经写好了Oracle的DAL,怎么才能让程序使用Oracle的DAL呢?
答案是通过配置文件中的
<appSettings>
<add key="DAL" value="App.Dal.Oracle"/>
</appSettings>
这个配置节来动态设置。换成App.Dal.SqlServer就又换回到SQL Server的DAL了。
Facing problems, think first, then search, finally ask.- 已标记为答案 我心飞扬 2009年8月14日 0:04
全部回复
-
你好,
Assembly.Load("程序集名")是动态加载程序集,参考地址:http://msdn.microsoft.com/zh-cn/library/x4cw969y.aspx:
CreateInstance("类名")是创建实例;
jon.valett@gmail.com- 已编辑 邹俊才Moderator 2009年8月13日 16:33 错别字
-
代码的意思是使用反射加载程序集,创建加载的程序集里面的类型。
还需要理解的是这种设计模式。
首先是分层(Layering),分层可以使应用程序的架构比较清晰,一般来说最常见的方式可以分为三层:表现层、逻辑层和数据层。
DAL顾名思义就是数据层了,逻辑层负责取得数据,然后为表现层提供接口(广义的接口,不仅仅是指Interface),表现层就从逻辑层的接口获取数据进行显示即可。
Factory的意思是工厂,这里是另外一个设计模式:工厂模式。
工厂就是提供流水线制造的地方,可以生产出一系列相同相似的产品。在这里是为了创建适应不同数据库(SQL Server, Oracle, Mysql)的DAL。
最后再讲讲反射,为什么要在这里通过反射来创建DAL?原因是为了:松散耦合。可以看到,如果我们换了一个数据库,比如之前是MS SQL Server,现在要用Oracle了,他们底层的一些操作是不一样的,我们已经写好了Oracle的DAL,怎么才能让程序使用Oracle的DAL呢?
答案是通过配置文件中的
<appSettings>
<add key="DAL" value="App.Dal.Oracle"/>
</appSettings>
这个配置节来动态设置。换成App.Dal.SqlServer就又换回到SQL Server的DAL了。
Facing problems, think first, then search, finally ask.- 已标记为答案 我心飞扬 2009年8月14日 0:04