用于决定选择何种SQL查询的设计模式
本文关键字:查询 设计模式 SQL 何种 决定 选择 用于 | 更新日期: 2023-09-27 18:29:30
我正在开发一个Winforms应用程序,该应用程序包含一个连接到SQL Server数据库的连接字符串,并表示我有15个不同的查询,需要在名为query1, query2, ...query15
的程序中运行。
我想扩展我的程序的功能,以便用户也可以使用其他数据库类型,如Oracle、MySql和Sqlite。这意味着对于每种类型,我的15个查询都会有不同的版本。
我想把我所有的查询脚本收集在一个地方,这样我的调用方法就可以通过名称引用它们,例如InsertNewCustomer(string name)
,然后我的模式——看看我在程序中设置的连接类型,就会运行相应的方法。
我该如何实现这种行为?
我建议您采用工厂和战略模式。它所做的是,工厂保存您策略的所有实例/类型(在本例中是您的数据库类型)。
这里有一个模拟代码,供您开始使用。
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;
}
}
阅读更多《工厂与战略》;