程霄 邱興興
摘要:在中小管理信息系統(tǒng)開發(fā)中用戶對(duì)需求的描述存在動(dòng)態(tài)性的問題。針對(duì)這種情況,提出一種以數(shù)據(jù)庫(kù)為基礎(chǔ)的軟件自動(dòng)化開發(fā)框架。框架包括軟件三層架構(gòu)的設(shè)計(jì)、緩存數(shù)據(jù)庫(kù)、代碼生成引擎、通用代碼模版的設(shè)計(jì)和數(shù)據(jù)庫(kù)概念模型設(shè)計(jì)的約束條件,實(shí)現(xiàn)基于數(shù)據(jù)庫(kù)物理模型的軟件源代碼的自動(dòng)生成。通過在農(nóng)產(chǎn)品質(zhì)量安全監(jiān)測(cè)系統(tǒng)實(shí)際應(yīng)用,分析結(jié)果表明,框架在實(shí)際項(xiàng)目中的應(yīng)用表明能有效適應(yīng)用戶需求變化,降低開發(fā)成本,提高軟件質(zhì)量。
關(guān)鍵詞: 代碼自動(dòng)化; 通用模版; 三層架構(gòu); 迭代; 農(nóng)產(chǎn)品質(zhì)量安全
中圖分類號(hào):TP311.51 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)28-6635-03
隨著2009年我國(guó)《食品安全法》的頒布,關(guān)系到人民健康和國(guó)計(jì)民生重大問題的農(nóng)產(chǎn)品產(chǎn)地安全管理成為了人們關(guān)注的焦點(diǎn)。然而,農(nóng)產(chǎn)品生產(chǎn)企業(yè)、流通企業(yè)、加工企業(yè)質(zhì)量監(jiān)管方面的不足,加之我國(guó)多數(shù)農(nóng)產(chǎn)品的生產(chǎn)空間分散、規(guī)?;?jīng)營(yíng)程度低、規(guī)范化生產(chǎn)條件差以及流通管理混亂等,致使農(nóng)產(chǎn)品質(zhì)量安全問題經(jīng)常發(fā)生。因此,科學(xué)地監(jiān)管農(nóng)產(chǎn)品生產(chǎn)、流通、加工過程,對(duì)防止突發(fā)性或群發(fā)性食品安全事故發(fā)生具有重要的現(xiàn)實(shí)意義。建設(shè)九江市農(nóng)產(chǎn)品質(zhì)量安全監(jiān)控信息系統(tǒng),以充分發(fā)揮在生產(chǎn)、加工與流通領(lǐng)域?qū)r(nóng)產(chǎn)品質(zhì)量安全實(shí)行追蹤監(jiān)測(cè)、質(zhì)量溯源、信息服務(wù)和決策支持的作用,已成為農(nóng)產(chǎn)品質(zhì)量安全管理工作的當(dāng)務(wù)之急。
在管理信息系統(tǒng)開發(fā)過程中,用戶對(duì)系統(tǒng)功能需求是一個(gè)從模糊到清晰的認(rèn)識(shí)過程,用戶的需求發(fā)生變化時(shí)也往往會(huì)帶來數(shù)據(jù)庫(kù)設(shè)計(jì)的變化,開發(fā)人員需要對(duì)代碼進(jìn)行大量的修改,代碼自動(dòng)生成技術(shù)的運(yùn)用[1-3]可以適應(yīng)這種情況,縮短MIS的開發(fā)周期。
本文運(yùn)用一種數(shù)據(jù)模型驅(qū)動(dòng)的面向MIS軟件自動(dòng)化開發(fā)框架[4],利用已有農(nóng)產(chǎn)品生產(chǎn)質(zhì)量安全追溯體系的研究成果,基于信息技術(shù)、數(shù)據(jù)庫(kù)技術(shù)、網(wǎng)絡(luò)技術(shù)等進(jìn)行農(nóng)產(chǎn)品質(zhì)量安全追溯系統(tǒng)的構(gòu)建與開發(fā),對(duì)代碼自動(dòng)化技術(shù)在農(nóng)產(chǎn)品質(zhì)量安全監(jiān)測(cè)系統(tǒng)中的應(yīng)用給出設(shè)計(jì)方法。
1 代碼自動(dòng)化開發(fā)框架
以.NET開發(fā)平臺(tái)為基礎(chǔ),運(yùn)用一個(gè)面向MIS的以數(shù)據(jù)庫(kù)為基礎(chǔ)基于代碼生成引擎的軟件自動(dòng)化開發(fā)框架,框架實(shí)現(xiàn)在三層架構(gòu)下的Web自動(dòng)化開發(fā),從而在實(shí)際應(yīng)用中提高開發(fā)效率,降低開發(fā)成本,靈活應(yīng)對(duì)用戶需求的不斷變化。本框架包含數(shù)據(jù)庫(kù)概念模型、通用代碼模版、代碼生成引擎和自動(dòng)生成的三層架構(gòu)代碼四個(gè)部分,如圖1所示。
在MIS開發(fā)過程中應(yīng)用上述框架有三個(gè)過程:首先,依據(jù)需求分析設(shè)計(jì)給出數(shù)據(jù)庫(kù)概念模型并由此產(chǎn)生具體的數(shù)據(jù)庫(kù)物理模型;其次,通過代碼生成引擎(CodeSmith)、通用代碼模版和數(shù)據(jù)庫(kù)物理模型自動(dòng)生成基于三層架構(gòu)的源代碼;最后,依據(jù)功能需求結(jié)合用戶界面資源對(duì)系統(tǒng)界面功能進(jìn)行開發(fā)。面向MIS軟件自動(dòng)化開發(fā)框架的運(yùn)用其主要工作包括數(shù)據(jù)庫(kù)概念模型的設(shè)計(jì),界面設(shè)計(jì)實(shí)現(xiàn),以及針對(duì)新增功能的三層架構(gòu)代碼編寫工作。
1.1 軟件層次構(gòu)架設(shè)計(jì)
在軟件設(shè)計(jì)中通常采用分層架構(gòu)來實(shí)現(xiàn)“高內(nèi)聚、低耦合”[5]的設(shè)計(jì)目標(biāo)。面向MIS軟件自動(dòng)化開發(fā)框架中的三層架構(gòu)就是將整個(gè)系統(tǒng)實(shí)現(xiàn)劃分為表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層,并對(duì)部分層次進(jìn)一步劃分。
實(shí)體層(Model):WebUI、BLL和DAL三層通過Model進(jìn)行數(shù)據(jù)的傳遞。
數(shù)據(jù)訪問層(Data Access Layer,DAL):本層實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問,通過配置實(shí)現(xiàn)支持多種不同類型的數(shù)據(jù)庫(kù),為BLL提供與數(shù)據(jù)庫(kù)無關(guān)的通用數(shù)據(jù)格式的數(shù)據(jù)。為支持多種數(shù)據(jù)庫(kù)DAL采用了工廠模式進(jìn)行設(shè)計(jì),細(xì)分為數(shù)據(jù)訪問層的抽象工廠層(DALFactory)、數(shù)據(jù)訪問接口層(IDAL)、數(shù)據(jù)訪問實(shí)現(xiàn)層(MySQLDAL/SQLServerDAL/OracleServerDAL)、數(shù)據(jù)庫(kù)訪問的方法庫(kù)(DBUtility)幾個(gè)部分,在該層中采用內(nèi)存數(shù)據(jù)庫(kù)Memcached作為緩存數(shù)據(jù)庫(kù)。
業(yè)務(wù)邏輯層(Business Logic Layer,BLL):本層實(shí)現(xiàn)業(yè)務(wù)規(guī)則的制定、業(yè)務(wù)流程的實(shí)現(xiàn),在WebUI與DAL之間的數(shù)據(jù)交換中承上啟下的作用。
表示層(Web User Interface,WebUI):本層實(shí)現(xiàn)顯示數(shù)據(jù)和接收用戶輸入的數(shù)據(jù),是人機(jī)交互界面,實(shí)現(xiàn)過程中包括一些用戶界面資源,如樣式、腳本等。WebUI與BLL之間相互傳遞數(shù)據(jù)。
1.2 數(shù)據(jù)庫(kù)概念模型建模
在面向MIS軟件自動(dòng)化開發(fā)框架中通過數(shù)據(jù)庫(kù)概念模型產(chǎn)生數(shù)據(jù)庫(kù)物理模型[6],而物理模型是代碼生成引擎自動(dòng)生成代碼的基礎(chǔ)之一,為避免與編程語言的語法規(guī)則和關(guān)鍵詞沖突,同時(shí)提高生成代碼的可讀性,需要對(duì)概念模型的定義過程進(jìn)行規(guī)范。
1)概念模型中的數(shù)據(jù)表名和字段名首字小寫,不使用下劃線,采用駝峰命名,且不能與編程語言的關(guān)鍵詞相同。由于物理模型中的表名都將對(duì)應(yīng)各個(gè)層中的類名,若出現(xiàn)關(guān)鍵詞作為將導(dǎo)致程序出錯(cuò)。
2)概念模型中的數(shù)據(jù)表名和字段名不能出現(xiàn)空格和中文字。雖然數(shù)據(jù)庫(kù)支持中文和空格作為表名和字段名,但由于程序語言中的變量名不允許出現(xiàn)空格,且代碼生成引擎不支持中文,這將導(dǎo)致生成的程序錯(cuò)誤。
3)概念模型中外鍵定義不能為表名。外鍵名若為表名則會(huì)出現(xiàn)類名與成員變量名相同的情況,這將導(dǎo)致生成的程序錯(cuò)誤。
1.3 緩存數(shù)據(jù)庫(kù)
Memcached是一個(gè)免費(fèi)開源、高性能、分布式內(nèi)存緩存系統(tǒng),用于大型Web站點(diǎn)的性能優(yōu)化提升,減少數(shù)據(jù)庫(kù)及文件系統(tǒng)的訪問壓力;是高性能的分布式內(nèi)存緩存服務(wù)器,通過緩存數(shù)據(jù)庫(kù)查詢結(jié)果,減少數(shù)據(jù)庫(kù)訪問次數(shù),以提高動(dòng)態(tài)Web應(yīng)用的速度、提高可擴(kuò)展性。Memcached通過在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨大的hash表,它能夠用來存儲(chǔ)各種格式的數(shù)據(jù),包括圖像、視頻、文件以及數(shù)據(jù)庫(kù)檢索的結(jié)果等。
DAL首次從數(shù)據(jù)庫(kù)中獲取到數(shù)據(jù)后進(jìn)行緩存,在下次讀取的時(shí)即可從緩存數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)。應(yīng)該注意的是Memcached數(shù)據(jù)置換算法采用的最近最少使用算法,需要在實(shí)際應(yīng)用中依據(jù)運(yùn)行情況調(diào)整緩存策略。
1.4基于CodeSmith的通用代碼模版
CodeSmith[7]是一個(gè)基于模版的代碼生成工具,用戶通過自定義模版[12]可以生成包括簡(jiǎn)單的強(qiáng)類型集合和完整應(yīng)用程序在內(nèi)的任何東西,并不限定特定的應(yīng)用程序設(shè)計(jì)或體系結(jié)構(gòu)。CodeSmith的模板是以“.cst”為后綴名的代碼文件,其代碼風(fēng)格非常類似于ASP.NET,模板中除了大量固定的代碼以外,還有遍布于各處的元數(shù)據(jù),固定代碼就是會(huì)被原封不動(dòng)地輸出的代碼,而元數(shù)據(jù)則可以被看作是模板中的變量。針對(duì)數(shù)據(jù)模型驅(qū)動(dòng)風(fēng)格的代碼生成,CodeSmith提供了一個(gè)封裝了所有的數(shù)據(jù)庫(kù)對(duì)象程序集(SchemaExplorer),該程序集中提供了數(shù)據(jù)庫(kù)(DatabaseSchema)、數(shù)據(jù)表(TableSchema)、數(shù)據(jù)列(ColumnSchema)的不同級(jí)別訪問,并支持多種數(shù)據(jù)源的連接。
數(shù)據(jù)庫(kù)的數(shù)據(jù)基本操作可分為增加(Insert)、修改(Update)、刪除(Delete)、查詢(Select)四種,通用代碼模版圍繞這四個(gè)基本操作進(jìn)行設(shè)計(jì),面向MIS軟件自動(dòng)化開發(fā)框架設(shè)計(jì)了產(chǎn)生Model、DAL、BLL、WebUI源代碼的通用代碼模版。運(yùn)用這些模版針對(duì)數(shù)據(jù)庫(kù)物理模型中的每個(gè)數(shù)據(jù)表自動(dòng)產(chǎn)生對(duì)應(yīng)的源代碼,為了實(shí)現(xiàn)與具體的數(shù)據(jù)庫(kù)訪問分離,將這些操作行為抽象為一個(gè)單獨(dú)的接口層IDAL,保證了系統(tǒng)的可擴(kuò)展性和數(shù)據(jù)庫(kù)的可移植性。在數(shù)據(jù)庫(kù)訪問層實(shí)現(xiàn)中提供MySQLDAL、SQLServerDAL、OracleDAL三個(gè)通用數(shù)據(jù)訪問模版,還可針對(duì)不同數(shù)據(jù)庫(kù)增加新模版。
2 系統(tǒng)應(yīng)用
農(nóng)產(chǎn)平質(zhì)量安全監(jiān)測(cè)系統(tǒng)是由九江市農(nóng)產(chǎn)品質(zhì)量安全監(jiān)測(cè)中心委托,該中心旨在建立用于全市范圍內(nèi)農(nóng)產(chǎn)品質(zhì)量安全數(shù)據(jù)采集統(tǒng)計(jì)的綜合性服務(wù)平臺(tái),為加大監(jiān)測(cè)力度以及提高監(jiān)測(cè)數(shù)據(jù)的時(shí)效性需要建立一套有效的數(shù)據(jù)傳遞、分析、統(tǒng)計(jì)的系統(tǒng)。
基于數(shù)據(jù)驅(qū)動(dòng)風(fēng)格的代碼自動(dòng)化開發(fā)框架核心工作就是對(duì)系統(tǒng)進(jìn)行分析設(shè)計(jì),獲得完整的數(shù)據(jù)庫(kù)概念模型,進(jìn)而依據(jù)數(shù)據(jù)庫(kù)概念模型通過開發(fā)框架自動(dòng)生成相關(guān)的代碼。因開發(fā)框架可以快速的產(chǎn)生可用的原型系統(tǒng),因此在項(xiàng)目開發(fā)的過程中采用迭代的方法,開發(fā)工作可以在需求被完整地確定之前啟動(dòng),并在一次迭代中完成系統(tǒng)的一部分功能或業(yè)務(wù)邏輯的開發(fā)工作,再通過用戶的反饋來細(xì)化需求,并開始新一輪的迭代。
2.1 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
目前在全市范圍內(nèi)農(nóng)產(chǎn)平質(zhì)量安全檢測(cè)終端類型多種多樣,數(shù)據(jù)格式不統(tǒng)一,系統(tǒng)將提供統(tǒng)一的數(shù)據(jù)采集方式及格式規(guī)范,通過各地區(qū)數(shù)據(jù)檢測(cè)點(diǎn)上報(bào)數(shù)據(jù)到系統(tǒng),系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行自動(dòng)分析統(tǒng)計(jì),并建立所需的統(tǒng)計(jì)報(bào)表以及安全警報(bào)信息等。系統(tǒng)的使用者可以分為五類角色,系統(tǒng)角色圖如圖2所示。
在需求分析過程中,我們發(fā)現(xiàn)通過檢測(cè)儀器獲得的數(shù)據(jù)具有多樣性、復(fù)雜性,對(duì)相關(guān)數(shù)據(jù)進(jìn)行分析篩選后把檢測(cè)數(shù)據(jù)劃分為大類、小類,建立檢測(cè)數(shù)據(jù)標(biāo)準(zhǔn)格式庫(kù),由專業(yè)人員對(duì)檢索數(shù)據(jù)格式庫(kù)進(jìn)行管理。
面向MIS軟件自動(dòng)化開發(fā)框架是通過數(shù)據(jù)概念模型開始工作的,首先是構(gòu)建當(dāng)前系統(tǒng)的數(shù)據(jù)庫(kù)物理模型,通過代碼自動(dòng)化技術(shù)給使用者提供了一個(gè)可以用原型系統(tǒng),并對(duì)原型系統(tǒng)進(jìn)行使用,并提出改進(jìn)意見;依據(jù)用戶反饋意見,對(duì)用戶需求進(jìn)一步分析,產(chǎn)生新的數(shù)據(jù)概念模型,通過框架自動(dòng)生成改進(jìn)的版本。通過對(duì)需求的迭代獲得用戶較為滿意的版本作為本系統(tǒng)的第一個(gè)正式版本。系統(tǒng)管理功能界面如圖3所示。
2.2 應(yīng)用分析
在項(xiàng)目開始階段,與使用方的溝通得到初步需求,依據(jù)需求分析結(jié)果構(gòu)建數(shù)據(jù)庫(kù)概念模型,通過開發(fā)框架快速生產(chǎn)原型系統(tǒng),并交由使用方測(cè)試使用進(jìn)一步明確需求,在重復(fù)多次后得到一個(gè)較為滿意的需求分析報(bào)告,以此為里程碑進(jìn)入穩(wěn)定的系統(tǒng)開發(fā)階段。使用代碼統(tǒng)計(jì)工具對(duì)系統(tǒng)交付使用后的代碼行數(shù)以及開發(fā)框架自動(dòng)生成的代碼行數(shù)進(jìn)行統(tǒng)計(jì),統(tǒng)計(jì)結(jié)果如表1所示。
Model代碼100%自動(dòng)生成,DAL代碼自動(dòng)生成率為90.1%,BLL代碼自動(dòng)生成率74.7%,WebUI代碼自動(dòng)生成率62.3%,平均代碼自動(dòng)生成率79.4%。通過上述數(shù)據(jù)可以看出,采用本文提出的軟件開發(fā)自動(dòng)化技術(shù),當(dāng)用戶需求發(fā)生變化時(shí),能夠及時(shí)的響應(yīng),減輕了開發(fā)者的工作量,提高了開發(fā)效率,使開發(fā)者能夠更專注去解決需求中的關(guān)鍵問題。
3 結(jié)束語
本文利用一種面向MIS的軟件開發(fā)自動(dòng)化開發(fā)技術(shù)開發(fā)框架,給出一種適應(yīng)中小型MIS的開發(fā)方法,能應(yīng)對(duì)用戶需求的動(dòng)態(tài)性。在九江市農(nóng)產(chǎn)品質(zhì)量安全監(jiān)測(cè)網(wǎng)設(shè)計(jì)與實(shí)現(xiàn)中,依據(jù)使用開發(fā)框架的流程,能快速產(chǎn)生原型系統(tǒng)讓使用者進(jìn)行試用并反饋,并最終得的一個(gè)用戶滿意的系統(tǒng)。從實(shí)際應(yīng)用的分析結(jié)果可以看出,開發(fā)者工作量降低,可以更多的專注于解決問題,框架具有較強(qiáng)的實(shí)用性,對(duì)于農(nóng)產(chǎn)品質(zhì)量安全監(jiān)測(cè)系統(tǒng)的開發(fā)具有良好的參考價(jià)值。
參考文獻(xiàn):
[1] 王曉宇,錢紅兵.基于UML類圖和順序圖的C++代碼自動(dòng)生成方法的研究[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30 (1): 190-195.
[2] 周兵,許俊,吳亞平.中小 MIS 快速原型構(gòu)建與自動(dòng)代碼生成[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,22 (5):28-31.
[3] 陳清,吳海濤,王璐.基于代碼自動(dòng)生成技術(shù)的管理信息系統(tǒng)的實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2013,41(2): 268-270.
[4] Cheng X,Qiu X X.Design and Implementation of a Software Automation Development Framework for Management Information System[C]//Advanced Materials Research. 2014,989: 4488-4492.
[5] 張志杰.基于分層結(jié)構(gòu)的管理信息系統(tǒng)架構(gòu)設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010,20 (10):146-149.
[6] 周育紅,閆鋒欣.數(shù)字資源跨平臺(tái)整合系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010,20 (1):243-246.
[7] 朱曉輝,王杰華,石振國(guó).NET下基于PowerDesigner 和CodeSmith的軟件自動(dòng)化開發(fā)技術(shù)[J].計(jì)算機(jī)科學(xué), 2010,37(7):156-159.