我正在开发一个Winforms应用程序,其中包含一个连接到SQL Server数据库的连接字符串,并说我需要在我的程序中运行15个不同的查询query1, query2, ...query15
。
我想扩展我的程序的能力,以便用户也可以使用其他数据库类型,如Oracle,MySql和Sqlite。这意味着每种类型的15个查询都会有不同的版本。
我想在一个地方收集我的所有查询脚本,所以我的调用方法可以通过名称来引用它们,例如InsertNewCustomer(string name)
然后我的模式 - 查看我在程序中设置的连接类型将运行相应的方法。
我该如何实现这种行为?
答案 0 :(得分:1)
我建议您执行工厂和策略模式。它的作用是工厂保存策略的所有实例/类型(在这种情况下是您的数据库类型)。
这是一个模拟代码,供您开始使用。
public class DatabaseStrategyFactory
{
private static DatabaseStrategyFactory _instance;
private Dictionary<string, Strategy> _collection;
private DatabaseStrategyFactory()
{
}
// singleton pattern
public static DatabaseStrategyFactory Instance { get { return _instance ?? (_instance = new DatabaseStrategyFactory()); }}
public static Initialize()
{
// load all strategies either by creating instances or storing the type
if(_collection == null)
{
_collection = new Dictionary<string, Strategy>();
_collection.Add(*string key either by class name/enum or whatever you want*, instance or type);
}
}
public Strategy GetStrategy(string name)
{
if(_collection == null)
throw new Exception();
Strategy strategy = null;
_collection.TryGetValue(name, out strategy);
return strategy;
}
}