用于决定选择何种SQL查询的设计模式

本文关键字:查询 设计模式 SQL 何种 决定 选择 用于 | 更新日期: 2023-09-27 18:29:30

我正在开发一个Winforms应用程序,该应用程序包含一个连接到SQL Server数据库的连接字符串,并表示我有15个不同的查询,需要在名为query1, query2, ...query15的程序中运行。

我想扩展我的程序的功能,以便用户也可以使用其他数据库类型,如Oracle、MySql和Sqlite。这意味着对于每种类型,我的15个查询都会有不同的版本。

我想把我所有的查询脚本收集在一个地方,这样我的调用方法就可以通过名称引用它们,例如InsertNewCustomer(string name),然后我的模式——看看我在程序中设置的连接类型,就会运行相应的方法。

我该如何实现这种行为?

用于决定选择何种SQL查询的设计模式

我建议您采用工厂战略模式。它所做的是,工厂保存您策略的所有实例/类型(在本例中是您的数据库类型)。

这里有一个模拟代码,供您开始使用。

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;
    }
}

阅读更多《工厂与战略》;