快讯

使用设计模式构建通用数据库访问类

2004-02-14 09:34  出处:PConline  作者:佚名  责任编辑:ycx 

实际上,Factory模式也可以不使用Factory类来实现,而是让接口抽象类自己来管理,这可以称作自管理的Factory,是Factory模式的一种变形。这么做的好处,是可以免去一个Factory类,使代码更加简练。这么做,我们需要对DBOperator类做一些改变,增加一个Instance方法。这也是对DBOperator采用抽象类而不是接口的原因(接口的方法不能有实现),代码如下: public static DBOperator Instance(string strConnetion) { if(strConnection.IndexOf("provider=")<0) //SqlServer { return new SqlDBOperator(strConnection); } else //other database { return new OleDBOperator(strConnection); } }   然后,客户端代码就可能是类似于下面的形式: DBOperator db= DBOperator.Instance(strConnection) db.Open(); db.需要的操作 db.Close(); 下面来看看连接池的做法,方法就是Singleton。 先看Singleton模式的经典含义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。推而广之,当我们需要精确控制类在系统中的实例的个数的时候,就可以使用Singleton模式。现在,我们需要构建一个缓冲池,保存数据库类的实例,正好是Singleton模式发挥作用的时候。 我们仍然让DBOperator类自己来管理这个缓冲池,为了实现这个目的,我们需要对DBOperator类做一些变化: 首先,增加两个变量:  static DBOperator[] ConnectionPool=new DBOperator[int.Parse(ConfigurationSettings.AppSettings["PoolCount"])];  static int CurrentPosition=-1; 然后,对Instance方法做一些改变: public static DBOperator Instance(string strConnection) { if(ApplicationConfiguration.PooledConnectionCount<1) //没有缓冲 { return CreateNewDBOperator(strConnection); } else { CurrentPosition++; if(CurrentPosition==ApplicationConfiguration.PooledConnectionCount) CurrentPosition=0; if(ConnectionPool[CurrentPosition]==null) { ConnectionPool[CurrentPosition]=CreateNewDBOperator(strConnection); } return ConnectionPool[CurrentPosition]; } } private static DBOperator CreateNewDBOperator(string strConnection) { if(strConnection.IndexOf("provider=")<0) //SqlServer { return new SqlDBOperator(strConnection); } else //other database { return new OleDBOperator(strConnection); } } 这里使用的算法比较简单,只是为了能够比较清楚地说明问题,读者应当能够在实际使用过程中,实现更好的算法。 以上,介绍了一种通用数据库操作类的实现设计方法,希望能够对大家有所启发。笔者设计Websharp中间件的时候,在数据库处理层,采用了上面的方法,取得了很好的效果。(孙亚民/ASPCool)
键盘也能翻页,试试“← →”键
IT热词搜索 来源:360新闻
软件论坛帖子排行
相关文章

相关软件:

腾讯QQ2012
大小:52.93 MB 授权:免费
腾讯QQ2012
立即下载
腾讯QQ2013
大小:49.32 MB 授权:免费
腾讯QQ2013
立即下载