设计模式应用2--通用数据库访问

作为一个da酱油de,首先说下这个话题很酱油符合我的口味。这个话题说的人很多了,我不厌其烦的再说下,很会的人可以换个博客看看了啊。

原理的东西是要看,有时候看点实际的例子也许有别样的收获。指出别人的错误也挺hai的。

老规矩类图:

 

既然说道设计模式了,就不简单的贴代码啦!解说下关键部分

1、单例

获取数据库访问
 public static IDb Singleton(string databaseName)
        {
            if (_IDb == null || _IDb.DbBaseName.Equals(databaseName))
            {
                lock (obj)
                {
                    if (_IDb == null)
                    {
                        _IDb = Create(databaseName);
                    }
                }
                return _IDb;
            }
            else
            {
                if (_IDb.State != ConnectionState.Open)
                    _IDb.Open();
                return _IDb;
            }
        }

同一个应用程序同一个数据库连接实例一个就行啦,没必要太多。就使用单例了。

2、策略模式

看类关系就知道这个可以支持多个数据库。不同数据库的访问数据库的细节肯定有区别,就像rownum是oracle的,同样是参数oracle的是加“:”,mssql是“@”等啦。一般的话就if..esle..。这样必须承认可以搞定。但写出来的代码。我想不出来是什么样子的。

策略模式我们就可以按数据类型建立不同的策略。有Access、Mssql、Oracle。

创建数据库
 private static IDb Create(string databaseName)
        {
            ConnectionStringSettings connectionStringSettings = ConfigurationManager.ConnectionStrings[databaseName];
            switch (connectionStringSettings.ProviderName)
            {
                case "System.Data.OracleClient": _IDb = new Oracle(connectionStringSettings, databaseName); break;
                case "System.Data.SqlClient": _IDb = new Mssql(connectionStringSettings, databaseName); break;
                case "System.Data.OleDb": _IDb = new Access(connectionStringSettings, databaseName); break;
                default: throw new Exception("Not support Database");
            }
            return _IDb;
        }

这样一下就行啦。

3、...剩下的等朋友们啦,你猜或认为该怎么写。

 

 

 

posted on 2012-09-02 13:43  Vaittr  阅读(1181)  评论(2编辑  收藏  举报

导航