最近越来越发现自己对于架构方面知识的浅薄;求教各位高手……1、最近看网上的一些例子:三层架构一般是这样的
SQLServerDAL的类、OracleDAL的类
分别继承自IDAL得类BLL层通过用IDAL对象;反射到具体的数据库访问类如:(Projcet.IDAL.ICategory)Assembly.Load(path).CreateInstance(className)这样做到  更换数据库时只需要新加一个数据库具体的访问类;修改配置文件2、还有就是System.Data.Common这个类可以建立一些针对所有数据库都适用的DAL层问题:
不知道这两种结构的区别、优劣、
还有就是System.Data.Common里面的一些如DbFactory类  实现的原理是否也是反射呢?

解决方案 »

  1.   

    都是用反射,可以参考PETSHOP网上的一些文章!
      

  2.   

    都是基于读配置文件的依赖注入模式IOC
      

  3.   

    第一种肯定是用反射!!
    第二种呢?如果第二种是反射  那三次结构  就没有必要搞个SqlServerDAL与IDAL直接搞一个DAL就可以了啊   反正可以所有数据库通用!
      

  4.   

    SQL一般写在DAL层,通过数据库类实现调用。 
    在BLL通过接口调用DAL方法 
    Model,实现业务实体。 
    IDAL,实现接口。 
    SQLServerDAL,实现接口里的方法。 
    web.config里的配置信息,为SQLServerDAL的程序集。 
    DALFactory,返回程序集的指定类的实例。 
    BLL,调用DALFactory,得到程序集指定类的实例,完成数据操作方法。 
    WEB,调用BLL里的数据操作方法。 
    在大项目开发中,主要是系统架构,看看petshop
      

  5.   

    一般只用dal model Bll 像那mvc七层都是大型项目中用到的
      

  6.   


    这个原理我也看过Petshop   就是我上面提到的第一种方式啊我的问题是  System.Data.Common类既然可以解决所有的数据库数据库访问   何必要写SqlServerDAL与IDAL层呢   直接用System.Data.Common类构建一个DAL层就可以了啊  而且以后换Oracle数据库的时候这个DAL也可以通用;所以我就弄不清楚   既然这样一个简单的方案可以实现   ;为什么还要弄那么多东西呢?
    还是另有玄机??
      

  7.   

    使用接口,提高代码复用性
    也可使用ORM
      

  8.   

    你如果只需要支持某一种数据库,那个IDAL也可以去掉。没必要给自己添加负担
      

  9.   

    我觉得用System.Data.Common可以实现多个数据库的DAL啊IDAL应该是为了反射时接受具体的DAL对象 所以有了Common类 IDAL层的意义应该不大了吧(支持多个数据库方面而言)
      

  10.   

    第二种也是用反射。也是用到工厂模式。System.Data.Common是命名空间不是类,其提供了一系列.NET Framework 数据提供程序的基类。不同的数据库源有不同的具体提供程序。比如:SqlClient命名空间下就是专门对mssql server的。光是有提供程序的切换还是不能只实现一个DAL就可以访问所有数据源的。比如他们的参数就不样,sql语句写法都不一样,你怎么就只有一个DAL,就可以又访问mssql又访问Oracle呢?三层架构中的SQLServerDAL、OracleDAL类和IDAL接口跟这个并没有矛盾、冲突。企业库里面就充分利用了 
    System.Data.Common下的类。要实现三层架构也可以使用企业库的数据访问层,很方便。
    三层架构里DAL层提供了IDAL接口,这样就实现了BLL和DAL的分离。建议你看看接口编程\设计模式方面的知识。
      

  11.   


    我觉得吧:参数是肯定一样啊  一个SQL语句  在Oracle、SQL SERVER里面应该是一致的参数吧Dbparameter其次关于不同数据库sql语言的不同 ,这种差异肯定是可以避免的啊   不然SQL SERVER 2000和SQL SERVER 2005的某些函数也一样不能兼容的
      

  12.   


    我说的意思不是只是在mssql各版本下,Oracle的sql语句有的就跟mssql的不一样。还有mssql的。参数,指的是参数名,有的带@,有的不带
    企业库里就封装了,所有参数名,都不需要再加上@。至于语句,就不行了当然有的语句它们是能用的,不能用的就不行了。
      

  13.   

    我说的意思不是只是在mssql各版本下,Oracle的sql语句有的就跟mssql的不一样。还有mssql的。不好意思,后面那mssql打错了,是想打MySQL,更正如下:
    我说的意思不是只是在mssql各版本下,Oracle的sql语句有的就跟mssql的不一样。还有MySQL的。