韋婷 張揚(yáng) 陳藝璇
(1.廣西工業(yè)職業(yè)技術(shù)學(xué)院 廣西壯族自治區(qū)南寧市 530000 2.廣西職業(yè)技術(shù)學(xué)院 廣西壯族自治區(qū)南寧市 530000)
在計(jì)算機(jī)軟件行業(yè)里,軟件設(shè)計(jì)模式、軟件架構(gòu)、框架等概念的提出,是前人探索如何在軟件開發(fā)的不同過程、不同層次上實(shí)現(xiàn)重用而總結(jié)出來的思想、方法和技術(shù)。從代碼級語句復(fù)用、模塊復(fù)用、結(jié)構(gòu)復(fù)用、系統(tǒng)復(fù)用、文檔復(fù)用到思想復(fù)用,軟件復(fù)用技術(shù)幾乎覆蓋了整個(gè)軟件開發(fā)的生命周期。設(shè)計(jì)模式即是抽象層級較高的思想復(fù)用技術(shù),與語言無關(guān),與平臺無關(guān),一套被反復(fù)使用、多人知曉的,并經(jīng)過分類編目的代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。前人總結(jié)出了很多種設(shè)計(jì)模式[1],也提出了很多模式的形式化方法,但是很少有人對模式組合進(jìn)行正式的研究[2]。而模式組合最直接的體現(xiàn)便是復(fù)合模式,形式上是將多個(gè)設(shè)計(jì)模式結(jié)合起來形成一個(gè)“框架”,以解決一般性問題。對于一個(gè)軟件系統(tǒng),最密切相關(guān)的三類人員,即用戶、開發(fā)者、維護(hù)者,本文即通過這三個(gè)不同的視角去探究設(shè)計(jì)模式及其復(fù)合關(guān)系、設(shè)計(jì)原則是如何指導(dǎo)系統(tǒng)設(shè)計(jì),在達(dá)到降低開發(fā)難度,利于團(tuán)隊(duì)開發(fā),提高系統(tǒng)可維護(hù)性的目標(biāo)下,開發(fā)出一個(gè)高質(zhì)量、高標(biāo)準(zhǔn)化、高安全性,符合高職院校實(shí)際工作需求的教師工作量管理系統(tǒng)。
設(shè)計(jì)模式主要分為三個(gè)大類,創(chuàng)建型模式包括工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式等五種;結(jié)構(gòu)型模式包括適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式等七種;行為型模式包括策略模式、模板方法模式、觀察者模式、迭代子模式等十一種。
如何在客觀世界的具體場景中選擇不同的設(shè)計(jì)模式,再根據(jù)編程語言實(shí)現(xiàn)?首先將需要解決的問題進(jìn)行抽象,其次根據(jù)不同設(shè)計(jì)模式適用的場景進(jìn)行選擇,最后再使用編程語言進(jìn)行實(shí)現(xiàn)。多個(gè)設(shè)計(jì)模式之間必須要考慮到融合性、可擴(kuò)展性,在設(shè)計(jì)過程中可使用UML 建模工具進(jìn)行詳細(xì)設(shè)計(jì)。通過反復(fù)的修改和擴(kuò)展,從而得到一個(gè)高質(zhì)量的軟件結(jié)構(gòu)。

圖1:應(yīng)用群系統(tǒng)的單點(diǎn)登錄

圖2:教師工作量管理系統(tǒng)功能總體架構(gòu)圖

圖3:教師工作量系統(tǒng)中的設(shè)計(jì)模式
在用戶視角中運(yùn)用到的策略模式和單例模式,保證了各類用戶的只有一個(gè)實(shí)例,在用戶的權(quán)限管理設(shè)計(jì)中,可以根據(jù)部門、增刪查改權(quán)限、職務(wù)級別等多種途徑進(jìn)行管理,可以設(shè)計(jì)不同的類來封裝不同的途徑算法,并使它們之間可以相互替換,這是典型的策略模式應(yīng)用場景。在維護(hù)者視角中主要使用抽象工廠模式、策略模式和觀察者模式,體現(xiàn)在統(tǒng)一數(shù)據(jù)接口功能和計(jì)算過程參數(shù)化功能模塊,在根據(jù)權(quán)重自動計(jì)算教師工作量的模塊中,當(dāng)權(quán)重參數(shù)進(jìn)行調(diào)整時(shí),將自動通知所有依賴這個(gè)參數(shù)對象的其他所有對象,在這里權(quán)重參數(shù)對象就是觀察目標(biāo),其他被通知的對象就是觀察者,這是典型的觀察者模式的模式動機(jī)。
在文獻(xiàn)[3]中的“用戶為中心”,“以人為本”的設(shè)計(jì)理念,認(rèn)為在開發(fā)產(chǎn)品的每一個(gè)步驟中,都要把用戶列入考慮范圍,除了產(chǎn)品的功能,用戶體驗(yàn)起著關(guān)鍵的影響。本文研究的重點(diǎn)不在于用戶體驗(yàn)的諸多要素,而是把其中的思想,用于設(shè)計(jì)模式的分析及應(yīng)用中。作為一個(gè)軟件產(chǎn)品,在智慧校園和高職院校爭創(chuàng)“高水平學(xué)校、高水平專業(yè)”的多驅(qū)動背景下,本文設(shè)計(jì)的是一個(gè)覆蓋教學(xué)、科研等諸多方面,涉及教務(wù)處、人事處、財(cái)務(wù)處等多個(gè)部門的教師工作量系統(tǒng),屬于Web 應(yīng)用系統(tǒng)。用戶不僅是教師,還有相關(guān)的系部、學(xué)院行政部門人員及領(lǐng)導(dǎo)。對于用戶,面對的不止有教師工作量系統(tǒng),往往還有學(xué)校的其他業(yè)務(wù)應(yīng)用系統(tǒng)。如果每個(gè)系統(tǒng)都要登錄/退出之后,再一次登錄去使用下一個(gè)系統(tǒng),這種用戶體檢是不太好的。而系統(tǒng)間跳轉(zhuǎn)一般需要系統(tǒng)與系統(tǒng)之間建立連接,若原系統(tǒng)間未曾對接過,便需要修改新增對接功能。這樣既不具備可行性,也違背了設(shè)計(jì)模式中一條最基礎(chǔ),最重要的原則,即開閉原則——當(dāng)新增一個(gè)功能時(shí),盡量去擴(kuò)展而不是修改。對于這樣多系統(tǒng)組成的應(yīng)用群,復(fù)雜性應(yīng)該由系統(tǒng)內(nèi)部承擔(dān),而不是用戶。用戶期待的應(yīng)該是一次登錄/退出,訪問整個(gè)應(yīng)用群與訪問單個(gè)系統(tǒng)一樣,即單點(diǎn)登錄。本文項(xiàng)目基于統(tǒng)一的身份認(rèn)證系統(tǒng)/中心,采用的是Webservice 技術(shù)實(shí)現(xiàn)的單點(diǎn)登錄。統(tǒng)一身份認(rèn)證中心接受用戶的用戶名密碼等安全信息,其他系統(tǒng)不提供登錄入口,只接受認(rèn)證中心的間接授權(quán)。統(tǒng)一身份認(rèn)證中心,承擔(dān)的是多應(yīng)用群中共性的功能或模塊。這種具有共性,同時(shí)具備整體-部分關(guān)系正是 “組合模式”的設(shè)計(jì)思想的體現(xiàn)。應(yīng)用群系統(tǒng)的單點(diǎn)登錄如圖1 所示。
粗粒度的權(quán)限管理,一般指的是資源類型的權(quán)限管理,比如菜單、頁面按鈕。等。而細(xì)粒度權(quán)限管理,就是數(shù)據(jù)級別的權(quán)限管理,比如系部的領(lǐng)導(dǎo)只能訪問本系教師的信息,教師只看到自己的菜單。實(shí)現(xiàn)方式如當(dāng)服務(wù)接口提供一個(gè)系部的id 參數(shù),設(shè)計(jì)一個(gè)控制器,根據(jù)當(dāng)前用戶的信息得到該用戶屬于哪個(gè)系,調(diào)用服務(wù)時(shí)將系部id傳入,實(shí)現(xiàn)該用戶只查詢本系的教師員工信息。對于同樣的數(shù)據(jù),對于不同的用戶或者角色,可以有不同的顯示,并支持進(jìn)行各種處理,這是“策略模式”的應(yīng)用。
對于一個(gè)學(xué)院,教師的基礎(chǔ)數(shù)據(jù)以及學(xué)院組織架構(gòu)數(shù)據(jù)應(yīng)由人事系統(tǒng)下行到數(shù)據(jù)庫,保證工作量管理系統(tǒng)和學(xué)院共享數(shù)據(jù)中心的數(shù)據(jù)保持一致性,而工作量管理系統(tǒng)中的數(shù)據(jù)有可能也會提供給其他系統(tǒng)使用,因而設(shè)計(jì)一個(gè)開放數(shù)據(jù)接口十分必要。有了統(tǒng)一的數(shù)據(jù)接口,系統(tǒng)間便具備了很好的擴(kuò)展性。遵循接口規(guī)范,未來需要進(jìn)行大規(guī)模數(shù)據(jù)分析、數(shù)據(jù)可視化的各類各級系統(tǒng)便能方便獲取到相關(guān)數(shù)據(jù)。這便是設(shè)計(jì)原則中的依賴倒轉(zhuǎn),中心思想是接口編程,制定好規(guī)范,把展現(xiàn)細(xì)節(jié)的任務(wù)交給實(shí)現(xiàn)類去完成。
分析了國內(nèi)高校的工作量管理系統(tǒng),學(xué)校間的差異性使得計(jì)算公式和流程并未做到通用化。在完成教務(wù)處提供的工作量計(jì)算表格提取計(jì)算的公式并參數(shù)化的工作后,面對類別多,公式復(fù)雜的工作量統(tǒng)計(jì),需要一個(gè)靈活擴(kuò)展的算法或策略,根據(jù)字符串進(jìn)行判斷選擇計(jì)算參數(shù),建立一個(gè)字符串和計(jì)算權(quán)重的對應(yīng)關(guān)系,當(dāng)工作量的計(jì)算方法和參數(shù)改變時(shí)不需要對系統(tǒng)進(jìn)行大量修改,只需維護(hù)對應(yīng)關(guān)系表即可,這里也用到了“策略模式”的設(shè)計(jì)思想。
工作量管理系統(tǒng)面向的是多用戶、多角色,用戶界面邏輯的更改比業(yè)務(wù)和數(shù)據(jù)邏輯更為頻繁。所以,把數(shù)據(jù)和表示層分開,再頻繁的用戶界面的更改,也不影響到數(shù)據(jù)和業(yè)務(wù)邏輯。通過經(jīng)典的MVC 模式來設(shè)計(jì)及實(shí)現(xiàn),它的基本思想是數(shù)據(jù),顯示和處理相分離。模型(Model)負(fù)責(zé)數(shù)據(jù)管理,視圖(View)負(fù)責(zé)數(shù)據(jù)顯示,控制器(Controller)負(fù)責(zé)業(yè)務(wù)邏輯和響應(yīng)策略。把分離出來的業(yè)務(wù)邏輯,交由控制器負(fù)責(zé),實(shí)現(xiàn)視圖將請求先發(fā)送給控制器,由控制器選擇對應(yīng)的模型來處理;模型返回的處理結(jié)果要先發(fā)送給控制器,由控制器選擇對應(yīng)的視圖來展現(xiàn),繼而形成一個(gè)閉環(huán)。模型作為一個(gè)“觀察者”,讓控制器和視圖在松耦合的狀態(tài)實(shí)現(xiàn)更新,這便是“觀察者模式”。
根據(jù)圖2 教師工作量的系統(tǒng)功能,需要設(shè)計(jì)多個(gè)視圖,多個(gè)模型,多個(gè)控制器才能完成,本文項(xiàng)目按照視圖組-控制器組-模型組來構(gòu)造整個(gè)程序框架。
視圖組的設(shè)計(jì),按照子功能模塊做相應(yīng)設(shè)計(jì),如工作量的錄入視圖、工作量的審核視圖等。對于每個(gè)視圖頁面,會有一些如導(dǎo)航、頁腳是每個(gè)頁面共有的,采用模板模式,封裝不變的部分,擴(kuò)展可變部分,提取各個(gè)頁面的共有代碼,而變化(不同)的那部分將作為擴(kuò)展,共同構(gòu)成頁面視圖。對于樹形菜單、按鈕等各類組件的視圖,通過使用“組合模式”,能一致地處理組合視圖和普通視圖。
模型組的設(shè)計(jì),包括工作量表單的增、刪、改、查模型、用戶表單的增、、刪、改、查模型等。一個(gè)模型可以對應(yīng)不同的視圖。而對于這些模型,都需要建立在數(shù)據(jù)庫連接的基礎(chǔ)上進(jìn)行數(shù)據(jù)交換的,因此設(shè)計(jì)一個(gè)數(shù)據(jù)庫連接公共模型,其他如工作量表單、用戶表單等對應(yīng)數(shù)據(jù)模型把其當(dāng)做工廠類,調(diào)用并創(chuàng)建一個(gè)連接即可進(jìn)一步做數(shù)據(jù)操作。這里用到了“工廠模式”。再則,對于數(shù)據(jù)庫的增、刪、改、查,每個(gè)不同表單都用到的相同操作,因此進(jìn)行封裝并且暴露方法接口,既能減少重復(fù)的代碼,也使得程序結(jié)構(gòu)清晰。這種封裝作為公共模塊供其他模型使用,實(shí)例化之后即可使用,也是用到了“工廠模式”。
控制器組的設(shè)計(jì),本文進(jìn)行了細(xì)化,分為兩個(gè)層次的處理,一是路由設(shè)置,二是控制器的處理邏輯。路由中定義了一定的請求分發(fā)邏輯,建立數(shù)據(jù)模型與視圖之間的映射關(guān)系。部分請求,還要掛載中間件,用于自動執(zhí)行一些函數(shù)。經(jīng)過路由選擇后,交由不同的處理程序,如查詢、刪除、添加、修改等。這種映射關(guān)系,實(shí)現(xiàn)了不同的控制器實(shí)例響應(yīng)不同的用戶操作視圖,即用到了“策略模式”。
如圖3 所示,MVC 作為復(fù)合模式,本文項(xiàng)目使用到了 “觀察者模式”、 “組合模式”、“工廠模式”、“策略模式”、“模板模式”等多種模式。通過MVC 模式的設(shè)計(jì)思想而構(gòu)建的項(xiàng)目或者系統(tǒng)框架,一些軟件開發(fā)人員亦稱之為MVC 框架。不同的項(xiàng)目或者系統(tǒng),根據(jù)實(shí)際情況,構(gòu)建的MVC 框架都會有所不同。MVC模式的出現(xiàn)最早可追溯到上世紀(jì)的70年代,經(jīng)過多年發(fā)展依然有很強(qiáng)的生命力,如今還衍生出了MVP、MVVM 等模式,但圍繞的核心問題還是界面的展示與業(yè)務(wù)邏輯的分割。本文在MVC 模式具體的應(yīng)用中,進(jìn)行了細(xì)化,對于視圖(組)、控制器(組)、模型(組)的實(shí)現(xiàn)上均做了接口化的處理,采用了資源接口的編程方式。在代碼實(shí)現(xiàn)上,采用先精細(xì)化、模塊化,后組合構(gòu)建的方式,亦順應(yīng)了當(dāng)前在云計(jì)算發(fā)展下興起的微服務(wù)思想。
本文以一個(gè)高職院校教師工作量管理系統(tǒng)為例,探析了設(shè)計(jì)原則、設(shè)計(jì)模式及其復(fù)合關(guān)系是如何應(yīng)用到系統(tǒng)設(shè)計(jì)及開發(fā)中的。設(shè)計(jì)模式作為最佳的實(shí)踐代表,對其合理的應(yīng)用,不應(yīng)只基于開發(fā)者、維護(hù)者視角,還應(yīng)基于用戶視角。各類軟件系統(tǒng)最終是要面向用戶的,用戶需求及用戶體驗(yàn)是軟件設(shè)計(jì)與開發(fā)的終極目標(biāo)。互聯(lián)網(wǎng)快速發(fā)展,需求變更頻繁,要求持續(xù)交付,是微服務(wù)興起的關(guān)鍵背景[4]。用戶層面,是模式和架構(gòu)發(fā)展的根本驅(qū)動力。對于開發(fā)者和維護(hù)者,使用合適的設(shè)計(jì)模式,一方面提高協(xié)同開發(fā)效率,提高模塊、框架的復(fù)用性,另一方面利于日后的維護(hù)、升級、擴(kuò)展。設(shè)計(jì)原則、設(shè)計(jì)模式及其復(fù)合關(guān)系所體現(xiàn)的思想,對軟件系統(tǒng)設(shè)計(jì)與開發(fā)具有重要的指導(dǎo)意義,是理論與實(shí)踐辯證統(tǒng)一、持續(xù)發(fā)展的最佳體現(xiàn)。