2014-11-06 66 views
1

我開發一個包含一個連接字符串連接到SQL Server數據庫,並說我有,我需要在我叫query1, query2, ...query15計劃運行15次不同的查詢WinForms應用程序。設計模式來決定哪些SQL查詢來選擇

我想延長我的方案的能力,使用戶也可以使用其他類型的數據庫,如Oracle,MySQL和SQLite的。這意味着每種類型都會有我的15個查詢的不同版本。

我想收集在一個地方我所有的查詢腳本,所以我的調用方法可以直接把它們的名字例如InsertNewCustomer(string name)然後我的模式 - 查看我在程序中設置的連接類型將運行相應的方法。

我怎樣才能實現這種行爲?

+0

@KenWhite是配置文件目前的確包含連接字符串。但是查詢會發生什麼? 「Sql Server」插入與「MySql」插入不同。我正在尋找一個查詢來爲我做出這個決定。 – Disasterkid 2014-11-06 02:33:31

+1

是的,我誤解了你的問題(不確定如何,現在我再讀一遍)。我刪除了我的評論來清理。謝謝。 :-) – 2014-11-06 02:38:11

回答

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;

+0

你能不能把它變得更具體一些我的情況? – Disasterkid 2014-11-06 02:45:20

+0

在工廠裏,它可以容納所有類型的實例嗎?如果你的sql查詢是靜態的或者沒有改變,那麼這個實例可以有一個包含查詢的私有字段字符串。因此,您可以擁有多個具有特定查詢的類,這些類只能在該類中使用。讓我知道你是否需要更多的闡述。 – DevEstacion 2014-11-06 03:14:31

+0

此外,如果您擁有IOC容器,則可以對其進行更改,而不是採用單例方法,這樣我就可以更好地進行測試。 – DevEstacion 2014-11-06 03:15:44