none
DALfactory层有什么作用? RRS feed

  • 问题

  • 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);//不明白这句话的意思?
            }
        }
    }
    
    2009年8月13日 15:55

答案

  • 代码的意思是使用反射加载程序集,创建加载的程序集里面的类型。

    还需要理解的是这种设计模式。

    首先是分层(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月13日 23:41
    版主

全部回复

  • 你好,

    Assembly.Load("程序集名")是动态加载程序集,参考地址:http://msdn.microsoft.com/zh-cn/library/x4cw969y.aspx:

    CreateInstance("类名")是创建实例;
    jon.valett@gmail.com
    2009年8月13日 16:32
    版主
  • 注意CreateInstance()一定是命名空间.类名,否则创建的实例为空
    Assembly.Load("程序集名")
    2009年8月13日 23:01
  • 代码的意思是使用反射加载程序集,创建加载的程序集里面的类型。

    还需要理解的是这种设计模式。

    首先是分层(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月13日 23:41
    版主