摘要:2010年,我參加了湖南某礦業監控平臺的開發,在此次項目中,我擔任了系統設計和開發的工做。該項目是湖南某礦業的一個集水質污染數據的採集,監測,報警,統計,和對數據採集儀器進行控制的平臺。本論文結合做者的實踐,討論了設計模式在此次開發中的運用,包括設計中用到的幾種設計模式,主要有觀察者模式,工廠模式,策略模式等,而且爲之後系統設計的複用提供了可能。經過這些模式的使用,有效的提升了系統的靈活性,擴展性和可維護性。這個項目的成功實施,有效的監控了礦業的排污,爲企業的污染治理提供了決策,從而爲建設綠色環保型企業貢獻了一點綿薄之力。web
本論文先討論設計模式的理論概念,而後介紹湖南某監控平臺,接着介紹在本項目中使用到的幾種設計模式以及運用這些模式的緣由和取得的效果,最後是討論系統能夠改進的地方。算法
正文數據庫
設計模式是人們在多年的軟件設計中積累下來,對可複用設計的一個總結。使用設計模式,可以提升系統的可擴展性,可靠性,可重用性。在GOF介紹中,一共有23種設計模式,分爲了三個類別:建立型,結構型和行爲型。其中建立型主要是對象實例化的抽象,包括:工廠模式,建造者模式,單例模式,原型模式。 結構型主要是將各類類或者對象結合在一塊兒造成更大的結構,主要有:裝飾模式,適配器模式,門面模式,享元模式,代理模式,合成模式,橋接模式。行爲型主要是在不一樣的對象之間劃分責任和算法的抽象,主要有:策略模式,命令模式,迭代模式,觀察者模式,中介者模式,模板模式,訪問者模式,備忘錄模式,職責鏈模式,狀態模式,解釋器模式。c#
湖南某礦業是一家礦業的開採,生產,加工的大型公司。爲了有效及時的監控企業的排污,公司急需一套可以檢測水質的平臺。此次咱們設計的這個平臺,就是這樣的一個集水質污染數據的採集,檢測,報警,統計和對數據採集儀進行管理的平臺,它由.NET(c#)+SqlServer2005+PLC開發。平臺的架構主要由C/S和B/S組成,C/S由採集儀,PLC通信層,工控機組成,其中採集儀完成數據的採集,PLC負責工控機和採集儀之間的通信,工控機負責對採集儀的控制,完成數據的採集,用不一樣監測圖的顯示監測數據,以及將實時數據傳輸至數據庫服務器持久化。B/S由客戶PC,數據庫服務器和WEB服務器組成,其中數據庫服務器負責實時數據的存儲,WEB服務器和客戶端PC一塊兒負責實時數據的檢測,監控,污染濃度超標時的報警,以及實時數據的管理(查詢等)。網絡圖示以下所示:設計模式
通過咱們的分析,從系統的可擴展性和靈活性出發,在檢測平臺中,有三個地方能夠運用設計模式:服務器
2)B/S中的報警功能,當不一樣濃度的污染物超標時,要對公司的管理人員進行不一樣方式的報警,若是按照通常的思路,這裏將會有多個IF/ELSE判斷混雜在咱們的類裏,耦合度比較大,之後要來修改比較麻煩。策略模式是一種將各自的算法封裝,使得這些算法能夠相互替換而不影響客戶端的一種設計模式。因此在這裏咱們決定採用策略模式:將不一樣濃度下采起的不一樣報警封裝爲不一樣的策略類,此外,創建一個上下文類,進行不一樣濃度的條件判斷選擇對應的具體策略類。這樣一來,提供給外部的就只有一個上下文類了,從而將IF/ELSE判斷進行了封裝,將算法和環境獨立開來,有利於類與類之間的高內聚,低耦合。設計類圖以下所示:
網絡
3)B/S中的數據庫持久化。如今數據庫服務器上咱們使用的SQL SERVER2005.隨着業務的發展和數據量的增大,將來有可能使用其餘類型的數據庫。工廠模式是一種建立型的設計模式,它「生產」出客戶端所須要的「產品」,使客戶端在不涉及到複雜的建立細節下「消費」和使用該產品,免除了直接創造該產品的責任,因此在持久化這裏採用了工廠模式。 整個B/S部分分爲以下幾層:WEB表現層,BLL業務邏輯層,IDAL數據持久接口層,SQLServerDALSQLSERVER數據持久層,DALFactory數據持久工廠類,Model實體層。其中IDAL是數據持久層的接口,定義了操做Model的方法。SQLServerDAL是具體的數據持久層,此處是SQLServer,它實現了IDAL.DALFactory是數據庫持久層的工廠類,它根據在web.config中XML配置的具體持久層程序集名稱,使用反射的方法實例出具體的數據持久層。系統的各層關係爲:WEB引用BLL,BLL經過DALFactory的工廠方法獲取具體的數據持久層。當咱們須要實際的數據持久層時,就只要經過DALFactory就能夠了。這樣一來,若是之後要替換其餘的數據庫,咱們只要開發出實現了IDAL的具體數據庫持久層,修好web.config裏的XML配置就能夠了,很是方便系統持久層的修改。設計類圖以下所示:架構
如上所述,在系統的設計中,考慮了系統中的不變和可變的地方,使用了觀察者模式,工廠模式和策略模式,不但提升了系統的擴展性,可修改性,靈活性,並且有利於設計的複用,爲之後相似的項目開發,打下了一個良好的基礎。值得指出來是,系統中還存在一些須要改進的地方,例如,如今的工控機與PLC通信層是採用串口來通訊的,耦合性比較大,尚未將通訊的這一部分抽象出來。若是將來採用其餘的方式來通信,例如TCP,就有可能形成極大的修改。因此這個地方也是須要之後來繼續完善的一個地方。設計