设计模式应用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、...剩下的等朋友们啦,你猜或认为该怎么写。