我正在開發一個計算組件配置的各種因素的項目。 配置由用戶在運行時設置/更改。我有一個組件基類,所有的配置項都是從它派生的。DataInterface的體系結構設計 - 刪除類型的開關
每個組件的信息都是在需要時從數據存儲中檢索的。 因此,存儲介質可以改變我寫了一個DataInterface類充當中介。
當前存儲介質是Access數據庫。 DataInterface類因此打開數據庫並創建查詢字符串以提取相關數據。查詢字符串對於每個組件都是不同的。
我遇到的問題是設計如何在組件類和DataInterface類之間調用GetData。我的解決方案演變如下:
1)DataInterface爲每個組件類型都有一個公共方法GetXXXXXData()。 (其中XXX是組件類型)。
Sensor sensor = new Sensor();
sensor.Data = DataInterface.GetSensorData();
2)DataInterface有一個公共方法GetData(componentType)並在組件類型中進行切換。
Sensor sensor = new Sensor();
sensor.Data = DataInterface.GetData(ComponentType.Sensor);
3)抽象組件基類有虛方法GetData(),它由每個派生類過濾。 GetData()使用DataInterface類來提取數據。
Sensor sensor = new Sensor();
sensor.GetData();
//populates Data field internally. Could be called in constructor
對於我來說,解決方案3似乎是最有效的做事方式。但是我仍然有這個問題,DataInterface仍然需要打開調用者的類型來決定使用哪個查詢字符串。
我可以將這些信息放入每個組件對象中,但是這會將組件耦合到所選擇的存儲介質。不好。另外,組件不應該關心數據的存儲方式。它應該調用它的GetData方法並返回數據。
希望這是有道理的。我正在尋找的是一種實現上述功能的方式,不依賴於使用開關類型。
我還在學習如何設計建築,所以任何關於改進的意見都歡迎。
TIA
所以,如果我已經正確理解你的答案;如果我添加一個新組件,比如Resistor,那麼我還需要添加一個名爲ResistorDataReader的類? – Kildareflare 2009-07-29 10:05:51