我的系统支持access和sqlserver数据库我是采用抽象工厂中提取xml的配置信息来确定创建哪个数据操作类问题出在静态数据操作方法上。因为有些方法是经常要用的,如:新增日志为了省下new一个对象消耗的资源,所以我认为采用静态方法比较经济。但是由于数据库是不定的,只能在工厂中new一个,再来调用new出来的实例方法这样就不能用静态方法了。这个时候,我想用静态方法,而又要支持多种数据库,该怎么办???

解决方案 »

  1.   

    使用静态方法,可能混淆概念,如果你看成使用Singleton的对象的方法更清楚。.net本来就是在实例化单个对象之前先要将类型对象调入内存(“在工厂中new一个,再来调用new出来的”),类型也是一种对象,所以说java那种根本没有静态方法和属性而使用Singleton对象的方法似乎更直观。以前的c++不需要这样处理静态方法。你所谓的静态方法也不过是类型这种特殊对象上的普通方法,而并不像你想象的是那种传统的c、c++的静态方法。.net为了兼容以前c++的习惯,用静态方法来隐藏singleton对象方法。你还认为无论如何都不应该是用对象吗?
      

  2.   

    可以在业务层使用静态方法,数据层使用抽象工厂模式。
    在业务层使用单件模式来模拟数据层静态。DLL:SqlAClass, AccessAClass
    AbsactFactory
    BLL: AClassstatic class AClass
    {
      // 利用工厂构造一个一个静态只读实例,在此类中dbAClass只有一个实例。
      private static readonly dbAClass = AbsactFactory.Instance.CreateDbAClass;
      
      // 调用具体实例方法
      public static void method1()
      {
          dbAClass.method1();
      }
      .......
    }