一种设计模式,用于决定选择哪种SQL查询

时间:2014-11-06 02:21:26

标签: c# database design-patterns connection-string oledb

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

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

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

我该如何实现这种行为?

1 个答案:

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

详细了解FactoryStrategy;