關(guān)鍵字 報(bào)表系統(tǒng);設(shè)計(jì)模式;數(shù)據(jù)異構(gòu);多窗口支持;模型-視圖-控制器
1 引言
傳統(tǒng)報(bào)表系統(tǒng),通常是針對(duì)某個(gè)商業(yè)領(lǐng)域使用,其使用的報(bào)表格式往往在設(shè)計(jì)時(shí)由設(shè)計(jì)人員已經(jīng)定做成模版的形式存儲(chǔ)在模版庫(kù)中,用戶使用時(shí)直接從模版庫(kù)讀取,處理方式也僅限于該領(lǐng)域內(nèi);雖然在一定程度上該解決方法帶來(lái)了一定管理上的便宜,可對(duì)于現(xiàn)代企業(yè)用戶來(lái)說(shuō),報(bào)表格式單一已經(jīng)局限了報(bào)表只能作為記賬簿來(lái)使用,使得報(bào)表的可塑性差,后期維護(hù)艱難,難以適應(yīng)生產(chǎn)過(guò)程的多樣性和變化性,無(wú)法滿足大型企業(yè)不斷擴(kuò)充的適應(yīng)性、智能型的要求,特別是當(dāng)業(yè)務(wù)領(lǐng)域變化時(shí),原有的報(bào)表系統(tǒng)往往很難支持新業(yè)務(wù)數(shù)據(jù)的管理分析,要進(jìn)行大量的重新開(kāi)發(fā)工作。
在本通用報(bào)表的設(shè)計(jì)中,將報(bào)表框架與報(bào)表數(shù)據(jù)分離開(kāi),用戶即能根據(jù)自己的需要隨意繪制表格,又能按照業(yè)務(wù)要求自主的選擇數(shù)據(jù)。一旦框架和數(shù)據(jù)定義完畢,系統(tǒng)可以自動(dòng)生成所需要的報(bào)表。為了經(jīng)濟(jì)的達(dá)到方便使用的目的,必須吸收先進(jìn)的軟件開(kāi)發(fā)思想,采用優(yōu)秀的軟件開(kāi)發(fā)方法以提高軟件質(zhì)量和軟件的重用性,其中提高軟件的重用性是減少開(kāi)發(fā)成本的關(guān)鍵。
主要介紹MVC設(shè)計(jì)模式在通用報(bào)表系統(tǒng)開(kāi)發(fā)中的應(yīng)用,給出了具體問(wèn)題相應(yīng)的解決辦法,提高了軟件的通用性和擴(kuò)展性。
2 設(shè)計(jì)模式
設(shè)計(jì)模式是設(shè)計(jì)面向?qū)ο筌浖倪^(guò)程中記錄的知識(shí)和經(jīng)驗(yàn),用一系列類結(jié)構(gòu)和對(duì)象來(lái)具體描述其含義。設(shè)計(jì)模式的目的就是復(fù)用這些面向?qū)ο笤O(shè)計(jì)的解決方案,根據(jù)具體應(yīng)用完成具體的設(shè)計(jì)以及便于這些抽象解決方案的積累和交流。與不使用設(shè)計(jì)模式的軟件系統(tǒng)相比,一個(gè)大量使用設(shè)計(jì)模式的軟件系統(tǒng)的對(duì)象建模更加合理,對(duì)象間的耦合度更小,效率、可靠性、可升級(jí)性、并發(fā)性、平行性和分布性更高,更能獲得高層次的設(shè)計(jì)復(fù)用和代碼復(fù)用。
設(shè)計(jì)模式概念最先來(lái)自于城市建筑專家對(duì)建筑模式的定義“每一個(gè)模式描述了在人們周圍不斷反復(fù)發(fā)生的問(wèn)題,以及該問(wèn)題的解決方案的核心。這樣,你就能一次又一次的使用該方案而不必做重復(fù)勞動(dòng)”。這種建筑上的模式思想在面向?qū)ο蟮脑O(shè)計(jì)模式中同樣適用,模式的核心就在于提供了相關(guān)問(wèn)題的解決方案。設(shè)計(jì)模式確定了所包含的類和實(shí)例,它們的角色、協(xié)作方式以及職責(zé)分配。它通過(guò)刻畫部件靜態(tài)和動(dòng)態(tài)結(jié)構(gòu)及其之間的合作關(guān)系,成功地應(yīng)用于解決商業(yè)數(shù)據(jù)處理、電子通信、圖形用戶界面、數(shù)據(jù)庫(kù)、分布式通信軟件等軟件構(gòu)造中的問(wèn)題。
一般而言,設(shè)計(jì)模式有4個(gè)要素:①模式名稱:用來(lái)描述問(wèn)題、解決方案和效果。②問(wèn)題:描述可以在什么時(shí)候使用設(shè)計(jì)模式。③解決方案:描述了設(shè)計(jì)模式的組成部分,它們之間的相互關(guān)系及各自的職責(zé)和協(xié)作方式。④效果:描述了模式應(yīng)用的效果及使用模式應(yīng)該權(quán)衡的問(wèn)題。一個(gè)設(shè)計(jì)模式命名抽象確定了一個(gè)通用設(shè)計(jì)結(jié)構(gòu)的主要方面,這些設(shè)計(jì)結(jié)構(gòu)能用來(lái)構(gòu)造可重用的面向?qū)ο笤O(shè)計(jì)。
我們?cè)趫?bào)表系統(tǒng)中主要使用了模型-視圖-控制器設(shè)計(jì)模式(MVC)、觀察者(Observer)、適配器模式(Adapter)以及橋接(Bridge)這幾種設(shè)計(jì)模式。
3 設(shè)計(jì)模式的應(yīng)用
報(bào)表系統(tǒng)中為了方便用戶對(duì)數(shù)據(jù)的分析和使用,同一業(yè)務(wù)數(shù)據(jù)常常需要多種視圖呈現(xiàn),即一個(gè)表格對(duì)象和一個(gè)柱狀圖對(duì)象可使用不同的表示形式描述同一個(gè)應(yīng)用數(shù)據(jù)對(duì)象的消息。表格對(duì)象和柱狀對(duì)象并不知道對(duì)方的存在,這樣使用戶可以根據(jù)需要單獨(dú)復(fù)用表格或柱狀圖;當(dāng)用戶改變比表格中的信息時(shí),柱狀圖能立即反映這一變化,這一行為意味著表格和柱狀圖都依賴于數(shù)據(jù)對(duì)象。早期的圖形化程序設(shè)計(jì)常常圍繞著事件驅(qū)動(dòng)的用戶界面來(lái)組織,這樣的直接后果就是數(shù)據(jù)處理、程序功能與顯示代碼完全糾結(jié)在一起。大型的圖形化程序中一個(gè)數(shù)據(jù)通常對(duì)應(yīng)多種表示與處理方式,把特定界面綁定到應(yīng)用程序上嚴(yán)重降低了程序的靈活性,使得一個(gè)很小的改動(dòng)也牽扯到大量的代碼,增加了程序開(kāi)發(fā)與維護(hù)的工作量。20世紀(jì)70年代,MVC模式在small talk 80的GUI設(shè)計(jì)中被提出,并且描述了不同部分的對(duì)象之間的通信方式,使它們不必卷入彼此的數(shù)據(jù)模型開(kāi)發(fā)方法中,使程序結(jié)構(gòu)變得清晰而靈活。
MVC模式包括三個(gè)部分:模型(Model)、視圖(View)和控制器(Controller),分別對(duì)應(yīng)于內(nèi)部數(shù)據(jù)、數(shù)據(jù)表示和輸入輸出控制部分。模型是與問(wèn)題相關(guān)數(shù)據(jù)的邏輯抽象,代表對(duì)象的內(nèi)在屬性,是整個(gè)模型的核心。它采用面向?qū)ο蟮姆椒ǎ瑢?wèn)題領(lǐng)域中的對(duì)象抽象為應(yīng)用程序?qū)ο螅谶@些抽象的對(duì)象中封裝了對(duì)象的屬性和這些對(duì)象所隱含的邏輯。視圖是模型的外在表現(xiàn),一個(gè)模型可以對(duì)應(yīng)一個(gè)或者多個(gè)視圖,如圖形用戶界面視圖、命令行視圖、API視圖;或按使用者分類:新用戶視圖、熟練用戶視圖等。視圖具有與外界交互的功能,是應(yīng)用系統(tǒng)與外界的接口:一方面它為外界提供輸入手段,并觸發(fā)應(yīng)用邏輯運(yùn)行;另一方面,它又將邏輯運(yùn)行的結(jié)果以某種形式顯示給外界。控制器是模型與視圖的聯(lián)系紐帶,控制器提取通過(guò)視圖傳輸進(jìn)來(lái)的外部信息,并將用戶與View的交互轉(zhuǎn)換為基于應(yīng)用程序行為的標(biāo)準(zhǔn)業(yè)務(wù)事件,再將標(biāo)準(zhǔn)業(yè)務(wù)事件解析為Model應(yīng)執(zhí)行的動(dòng)作(包括激活業(yè)務(wù)邏輯或改變Model的狀態(tài))。同時(shí),模型的更新與修改也將通過(guò)控制器來(lái)通知視圖,從而保持各個(gè)視圖與模型的一致性。
實(shí)現(xiàn)MVC模式時(shí)面對(duì)的主要問(wèn)題是Model和View的關(guān)系,在設(shè)計(jì)模式中的Observer模式很好的描述了如何建立這種關(guān)系。這一模式中關(guān)鍵的對(duì)象是目標(biāo)(subject)和觀察者(observer)。一個(gè)目標(biāo)可以有多個(gè)依賴它的觀察者;一旦目標(biāo)發(fā)生變化,所有依賴它的觀察者都得到通知,并做出響應(yīng),即每個(gè)觀察者都將查詢目標(biāo)進(jìn)行更新,以保證和目標(biāo)的狀態(tài)同步。這種模式允許我們獨(dú)立的改變目標(biāo)和觀察者;用戶可以單獨(dú)復(fù)用目標(biāo)對(duì)象而無(wú)需同時(shí)復(fù)用其觀察者,反之亦然。這種模式可以在不改動(dòng)目標(biāo)和其他觀察者的前提下增加觀察者。