• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      模型驅(qū)動的預(yù)算管理系統(tǒng)設(shè)計與實現(xiàn)

      2016-02-23 03:40:42郭寧遠(yuǎn)徐建良
      關(guān)鍵詞:子課題序列化開發(fā)人員

      郭寧遠(yuǎn),徐建良

      (中國海洋大學(xué) 信息科學(xué)與工程學(xué)院,山東 青島 266100)

      模型驅(qū)動的預(yù)算管理系統(tǒng)設(shè)計與實現(xiàn)

      郭寧遠(yuǎn),徐建良

      (中國海洋大學(xué) 信息科學(xué)與工程學(xué)院,山東 青島 266100)

      針對財務(wù)預(yù)算的領(lǐng)域概念和復(fù)雜需求,將一種模型驅(qū)動的開發(fā)方式實踐于預(yù)算管理系統(tǒng)的設(shè)計與實現(xiàn),使開發(fā)人員脫離復(fù)雜的數(shù)據(jù)庫設(shè)計,更加專注領(lǐng)域概念的消化、模型和數(shù)據(jù)傳輸對象的創(chuàng)建。給出了預(yù)算管理系統(tǒng)的整體說明和框架的總體結(jié)構(gòu)設(shè)計,并以開發(fā)順序依次介紹了各層的設(shè)計與實現(xiàn),最后結(jié)合系統(tǒng)快速上線的效果說明了這種模型驅(qū)動開發(fā)方式的可行性、便利性和快捷性。

      預(yù)算管理; 信息系統(tǒng);EntityFramework;ModelFirst; 數(shù)據(jù)傳輸對象; 多層架構(gòu);JSON;

      0 引言

      在面對某領(lǐng)域內(nèi)的專業(yè)概念和復(fù)雜需求時,將新知識吸收轉(zhuǎn)化為軟件產(chǎn)品對于軟件開發(fā)人員來說是一項艱巨的任務(wù)。一方面在此過程中若軟件開發(fā)人員對領(lǐng)域?qū)<业男枨罄斫獠煌笍?,將會?dǎo)致工作重心的偏離、軟件交付期延長、需求頻繁變更等影響軟件開發(fā)和交付的嚴(yán)重后果。另一方面,軟件開發(fā)人員更偏向于使用技術(shù)來解決領(lǐng)域問題,比如沉溺于設(shè)計完美的數(shù)據(jù)庫來滿足需求,而這往往是事倍功半的方法。

      基于模型的開發(fā)方式提高了代碼本身的溝通能力。模型是一種知識形式,它對知識進(jìn)行有選擇的簡化和有目的的結(jié)構(gòu)化[1]。使用適當(dāng)?shù)哪P筒⒛P拓灤┯谡麄€開發(fā)過程,可以使軟件開發(fā)人員專注于需求相關(guān)的信息,簡化與領(lǐng)域?qū)<业臏贤ǎ怪R表達(dá)更加準(zhǔn)確,更加貼合需求。

      EntityFramework是微軟研發(fā)的一種對象關(guān)系映射組件(ORM),它可以在關(guān)系型數(shù)據(jù)庫和對象之間產(chǎn)生自動映射[2]。在EntityFramework6.x版本中提供三種開發(fā)模式:CodeFirst、DatabaseFirst和ModelFirst[3]。本文將利用ModelFirst開發(fā)模式,以模型的構(gòu)建為中心,通過模型驅(qū)動開發(fā),數(shù)據(jù)庫由模型生成,開發(fā)人員只需將關(guān)注點放在領(lǐng)域模型和數(shù)據(jù)傳輸對象(DTO)的轉(zhuǎn)化上即可。

      1 系統(tǒng)整體說明

      1.1 系統(tǒng)基本流程

      圖1 預(yù)算新建及審核流程

      系統(tǒng)主要分為兩個業(yè)務(wù)流程,即預(yù)算業(yè)務(wù)流程和預(yù)算調(diào)整業(yè)務(wù)流程。

      預(yù)算業(yè)務(wù)流程如圖1所示,起于專家對已經(jīng)立項的項目添加預(yù)算,終于財務(wù)處管理員審核通過預(yù)算。

      預(yù)算調(diào)整流程如圖2所示,貫穿于整個項目進(jìn)行過程中,當(dāng)本次預(yù)算出現(xiàn)改變等需要調(diào)整的情況時,專家提出調(diào)整請求,由科技處管理員審核。

      圖2 預(yù)算調(diào)整新建及審核流程

      1.2 系統(tǒng)模塊劃分

      系統(tǒng)以項目預(yù)算業(yè)務(wù)流程為核心,以數(shù)據(jù)查詢、審核、分析為重心,包括基本信息維護(hù)、預(yù)算管理、預(yù)算調(diào)整管理、子課題管理、預(yù)算審核管理、調(diào)整審核管理、統(tǒng)計報表等功能。系統(tǒng)模塊如圖3所示。

      圖3 模塊劃分圖

      模塊功能簡要說明如下:

      (1)基本信息維護(hù):包括用戶、角色、權(quán)限、界面等用戶關(guān)聯(lián)信息管理,系統(tǒng)使用基于角色的訪問控制方法,可便捷簡單地處理用戶與權(quán)限之間關(guān)系;維護(hù)批復(fù)預(yù)算基本增、刪、改、查操作。

      (2)預(yù)算管理:包括專家對負(fù)責(zé)項目預(yù)算信息的基本處理,如新建、修改、查看、保存、提交、報表導(dǎo)出等,以及該項目子課題的科目預(yù)算制定與子課題指派等功能。

      (3)預(yù)算調(diào)整管理:預(yù)算調(diào)整是項目在執(zhí)行過程中,專家對承擔(dān)的項目預(yù)算進(jìn)行調(diào)整工作,包括調(diào)整的新建、修改、查看、保存、提交等工作,在調(diào)整過程中,可以添加新的子課題;專家亦可以查閱項目之前的每一次調(diào)整。

      (4)子課題管理:專家可對子課題憑單號、賬本號進(jìn)行編輯,也可查看參與的項目與子課題的預(yù)算分配情況。

      (5)預(yù)算審核管理:財務(wù)處管理員對專家提交的項目預(yù)算進(jìn)行審核。

      (6)調(diào)整審核管理:科技處管理員對專家提交的預(yù)算調(diào)整進(jìn)行審核。

      (7)預(yù)算數(shù)據(jù)統(tǒng)計:提供子課題數(shù)據(jù)的導(dǎo)出功能,將系統(tǒng)中的數(shù)據(jù)根據(jù)財務(wù)處相關(guān)要求導(dǎo)出一定格式的DBF文件,供財務(wù)處統(tǒng)計、分析、導(dǎo)入等使用。

      2 系統(tǒng)結(jié)構(gòu)設(shè)計與各層次的實現(xiàn)

      系統(tǒng)采用B/S架構(gòu),客戶端只需一個瀏覽器,就可以通過Web服務(wù)器與服務(wù)器端進(jìn)行數(shù)據(jù)交互[4]。按照高效、易維護(hù)的原則將系統(tǒng)分為展示層、服務(wù)層、數(shù)據(jù)轉(zhuǎn)化層、業(yè)務(wù)邏輯層、領(lǐng)域模型層、DTO模型層六個層次,如圖4所示。

      圖4 系統(tǒng)結(jié)構(gòu)圖

      系統(tǒng)打破傳統(tǒng)的以業(yè)務(wù)邏輯為中心的開發(fā)模式,轉(zhuǎn)為以領(lǐng)域模型和DTO模型為中心的開發(fā)模式,使前后端開發(fā)人員更專注處理用戶的需求,更快地理解、吸收領(lǐng)域知識,從而構(gòu)建高質(zhì)量、易維護(hù)的軟件產(chǎn)品。這種開發(fā)模式的順序為:

      (1)開發(fā)人員與領(lǐng)域?qū)<疫M(jìn)行交流溝通,根據(jù)需求確定系統(tǒng)的領(lǐng)域模型結(jié)構(gòu),再根據(jù)領(lǐng)域模型構(gòu)建前后臺傳輸?shù)腄TO模型。

      (2)確定好領(lǐng)域模型和DTO模型,前端的開發(fā)只需關(guān)注與后端服務(wù)器交互的DTO模型,根據(jù)用戶對界面的要求和各個界面的DTO模型構(gòu)建展示層中的各個界面。

      (3)后端服務(wù)器端只需關(guān)注領(lǐng)域模型與DTO模型之間的轉(zhuǎn)化,根據(jù)需求的轉(zhuǎn)化規(guī)則完成業(yè)務(wù)邏輯層的編寫。

      (4)根據(jù)前后臺約定的數(shù)據(jù)傳輸格式,完成數(shù)據(jù)轉(zhuǎn)化層編寫。

      (5)編寫服務(wù)層WebService供前端展示層調(diào)用。

      開發(fā)順序如圖5所示。

      圖5 開發(fā)順序圖

      2.1 領(lǐng)域模型層設(shè)計實現(xiàn)

      領(lǐng)域模型層是系統(tǒng)的核心層,是連接整個系統(tǒng)的橋梁。在此層次中軟件開發(fā)人員利用EntityFramework的ModelFirst開發(fā)模式構(gòu)建模型,模式的核心為EDM(EntityDataModel)技術(shù),EDM提供圖形化的設(shè)計界面,將模型設(shè)計和代碼實現(xiàn)綁定,通過與領(lǐng)域?qū)<业慕涣?,利用頭腦風(fēng)暴等活動將系統(tǒng)的領(lǐng)域概念和復(fù)雜需求等知識消化并提煉到模型當(dāng)中,并通過不斷地修改和調(diào)整模型使之更滿足預(yù)算系統(tǒng)的需求,最終確定出整個系統(tǒng)的領(lǐng)域模型。

      確定好領(lǐng)域模型后,開發(fā)人員只需保存模型,即可根據(jù)模型中屬性和實體間關(guān)聯(lián)等信息生成所有實體對象,并生成一個繼承于DbContext基類的數(shù)據(jù)庫上下文對象[5]。其中EntityFramework庫里面的DbContext基類為操控實體對象執(zhí)行上下文環(huán)境, 提供所需的架構(gòu)和映射元數(shù)據(jù)(Meatadata)、數(shù)據(jù)庫鏈接,同時還包括對象緩存、跟蹤狀態(tài)和關(guān)聯(lián)管理等功能[3]。

      保存好模型并生成實體和數(shù)據(jù)庫上下文后,在模型中選擇“根據(jù)模型生成數(shù)據(jù)庫”,配置好連接字符串,即可從模型映射到相應(yīng)的數(shù)據(jù)庫中,使開發(fā)人員擺脫使用復(fù)雜的數(shù)據(jù)庫管理工具進(jìn)行數(shù)據(jù)庫設(shè)計和實現(xiàn)的工作。

      以預(yù)算及其審核模塊為例,構(gòu)建圖6所示模型。

      圖6 預(yù)算及審核模型圖

      2.2DTO模型層設(shè)計實現(xiàn)

      領(lǐng)域模型層完成后,開發(fā)人員的下一個關(guān)注點應(yīng)是數(shù)據(jù)的傳輸,也就是DTO模型的構(gòu)建。

      DTO(DataTransferObject)即數(shù)據(jù)傳輸對象,是一種用來在多層架構(gòu)軟件系統(tǒng)中層間交換數(shù)據(jù)的對象。DTO的提出是為了在客戶端和服務(wù)器端交換大量的數(shù)據(jù),而無需多個細(xì)粒度的調(diào)用,從而減少遠(yuǎn)程調(diào)用的數(shù)目 ,避免相關(guān)的網(wǎng)絡(luò)負(fù)載[6]。

      開發(fā)人員可根據(jù)領(lǐng)域模型和原型界面構(gòu)建DTO模型。在預(yù)算管理系統(tǒng)框架中,業(yè)務(wù)邏輯層根據(jù)每個界面的數(shù)據(jù)需求從領(lǐng)域模型層中取出相應(yīng)的數(shù)據(jù)并組合成與需求數(shù)據(jù)相對應(yīng)的DTO對象,然后交由數(shù)據(jù)轉(zhuǎn)化層;或者由數(shù)據(jù)轉(zhuǎn)化層將服務(wù)層傳來的數(shù)據(jù)轉(zhuǎn)化成DTO對象,然后交由業(yè)務(wù)邏輯層進(jìn)行處理。所以,DTO模型是前后臺數(shù)據(jù)傳輸?shù)暮诵?,確定好DTO模型后,向下關(guān)注業(yè)務(wù)邏輯層的編寫,向上關(guān)注數(shù)據(jù)轉(zhuǎn)化層、服務(wù)層、展示層的編寫,并且可以同時進(jìn)行,大大節(jié)約了時間成本。

      以預(yù)算審核列表的顯示為例,DTO模型的示例代碼如下:

      publicclassBudgetAuditListDTO{

      publicListbudgetAuditList{get;set; }

      }

      publicclassBudgetAuditVO{

      publicintprojectid{get;set; }

      publiclongtotalamounts{get;set; }

      publiclongouteramounts{get;set; }

      publicstringprjmanagername{get;set; }

      publicstringprjstate{get;set; }

      }

      2.3 業(yè)務(wù)邏輯層設(shè)計實現(xiàn)

      領(lǐng)域模型層和DTO模型層均構(gòu)建完畢后,業(yè)務(wù)邏輯層的職責(zé)是領(lǐng)域模型和DTO模型之間的轉(zhuǎn)化。語言集成查詢(LanguageIntegratedQuery,LINQ)是一組語言特性和API,LINQtoEntities提供了查詢關(guān)系數(shù)據(jù)庫中的實體模型的方式[7]。在此層次中,系統(tǒng)使用LINQtoEntities技術(shù),從領(lǐng)域模型實體中進(jìn)行數(shù)據(jù)的增、刪、改、查。

      以“我的子課題列表”的顯示為例,系統(tǒng)在接收到前臺的數(shù)據(jù)請求后,業(yè)務(wù)邏輯層使用LINQtoEntities技術(shù)將數(shù)據(jù)從數(shù)據(jù)庫中取出。示例代碼如下:

      varquery=frommissin

      database.MissionSet.OfType()

      wheremiss.ManagerId==userId

      selectnew{

      MissionId=miss.Id,

      ProjectId=miss.ProjectId,

      MissionName=miss.MissionName

      };

      查詢結(jié)束后,將結(jié)果根據(jù)列表所對應(yīng)的DTO模型進(jìn)行DTO模型屬性的賦值和組合,示例代碼如下:

      foreach(varqinqueryList){

      MyMissionListVOmmlVO=newMyMissionListVO(){

      missionid=q.MissionId,

      projectid=q.ProjectId,

      mssname=q.MissionName};

      this.missionListDTO.Add(mmlVO);

      }

      經(jīng)過上述步驟,業(yè)務(wù)邏輯層就完成了領(lǐng)域模型與DTO模型的轉(zhuǎn)化。

      2.4 數(shù)據(jù)轉(zhuǎn)化層和服務(wù)層設(shè)計實現(xiàn)

      預(yù)算管理系統(tǒng)中,前后臺數(shù)據(jù)是通過JSON(JavaScriptObjectNotation)格式來傳輸?shù)摹SON是一種輕量級的數(shù)據(jù)傳輸格式,易于閱讀和編碼,可以在多種語言之間進(jìn)行數(shù)據(jù)交換[8]。數(shù)據(jù)轉(zhuǎn)化層將業(yè)務(wù)邏輯層傳來的DTO對象序列化成JSON格式的數(shù)據(jù),或者根據(jù)服務(wù)層傳來的JSON格式的數(shù)據(jù)反序列化成DTO對象。

      預(yù)算管理系統(tǒng)的數(shù)據(jù)轉(zhuǎn)化層使用JSON.NET技術(shù)實現(xiàn)JSON的序列化和反序列化。使用JSON.NET技術(shù)可以自動進(jìn)行JSON的序列化和反序列化,是.NET框架下一款功能強大且高效的開源序列化和反序列化工具[9]。

      以子課題更新功能為例,先將服務(wù)層傳來的子課題信息反序列化為DTO對象,交由業(yè)務(wù)邏輯層保存后,將返回的子課題再序列化為JSON返回給服務(wù)層。示例代碼如下:

      MissionDTOmissionDTO=

      JsonConvert.DeserializeObject(json);

      missionDTO=aarmb.SaveAndReturn(database);

      json=

      JsonConvert.SerializeObject(missionDTO,Formatting.Indented);

      預(yù)算管理系統(tǒng)的服務(wù)層提供WebService供展示層調(diào)用,負(fù)責(zé)接收展示層發(fā)來的請求,并將數(shù)據(jù)傳給數(shù)據(jù)轉(zhuǎn)化層。

      以子課題更新的WebService為例,服務(wù)層接收到前端的請求后,實例化數(shù)據(jù)轉(zhuǎn)化層的對象,將JSON等數(shù)據(jù)傳給數(shù)據(jù)轉(zhuǎn)化層。示例代碼如下:

      publicclassAddAndReturnMissions:WebServiceBase{

      [WebMethod]

      publicvoidSaveAndReturn(stringmssParam){

      AddAndReturnMissionsTransaarmT=

      newAddAndReturnMissionsTrans();

      aarmT.SaveAndReturn(Database,mssParam);}

      }

      2.5 展示層設(shè)計實現(xiàn)

      預(yù)算管理系統(tǒng)的展示層采用ExtJS富客戶端框架。ExtJS是基于JavaScript語言開發(fā)的客戶端Ajax框架,優(yōu)點是與后臺技術(shù)無關(guān),而且瀏覽器兼容性較強[10]。

      在確定完領(lǐng)域模型和DTO模型后,軟件的前臺開發(fā)人員利用ExtJS后臺技術(shù)無關(guān)的優(yōu)點,并利用之前確定好的DTO模型和需求分析階段的原型界面即可編寫前端代碼。

      預(yù)算管理系統(tǒng)利用ExtJS提供的視圖、表單、列表、表格等組件構(gòu)建友好、美觀的用戶界面,并通過ExtJS提供的Ajax功能與后臺進(jìn)行交互。以財務(wù)處管理員登錄后的界面為例,用戶登錄成功后,系統(tǒng)發(fā)起主界面的Ajax請求,取得相應(yīng)數(shù)據(jù)并渲染到用戶界面。示例界面如圖7所示。

      圖7 預(yù)算管理系統(tǒng)主界面

      3 結(jié)論

      模型驅(qū)動的開發(fā)方式適用于需求急迫、領(lǐng)域概念復(fù)雜、對軟件質(zhì)量要求高的軟件研發(fā)。本文針對預(yù)算管理系統(tǒng)的復(fù)雜需求,展示了模型驅(qū)動開發(fā)方式的實踐,軟件開發(fā)人員使用模型作為一種語言,與領(lǐng)域?qū)<医涣鞑⒉粩喔倪M(jìn)模型,快速地明確需求,使領(lǐng)域知識精確地消化于模型中。在明確模型之后,以模型為橋梁,使系統(tǒng)框架中各個層次并行開發(fā),大大節(jié)約了時間成本。并行的開發(fā)使開發(fā)人員專注于各層次的功能需求,提高了代碼的質(zhì)量。通過模型,軟件開發(fā)人員還可以挖掘潛在需求進(jìn)行深度開發(fā),進(jìn)一步改進(jìn)軟件的性能。

      目前預(yù)算系統(tǒng)已上線使用,其在短期內(nèi)的上線使用和其穩(wěn)定性證明了文中介紹的基于模型驅(qū)動的開發(fā)方式的可行性、便利性和快捷性。

      [1]EVANSE.領(lǐng)域驅(qū)動設(shè)計[M].趙俐,盛海艷,劉霞,等,譯.北京:人民郵電出版社, 2010.

      [2] 黃睿.基于Java技術(shù)的ORM工具接口的設(shè)計與實現(xiàn)[D]. 長春:吉林大學(xué),2012.

      [3] 沈霞菲, 王建中.基于.NETEntityFramework數(shù)據(jù)庫訪問機制的設(shè)計與應(yīng)用[J].現(xiàn)代電子技術(shù),2014(24):5-8.

      [4] 谷惠敏.基于Web的高校檔案管理系統(tǒng)設(shè)計[J].現(xiàn)代電子技術(shù),2015(21):139-141.

      [5]LERMANJ,MILLERR.Programmingentityframework:DbContext[M].O’reillyMedia,2012.

      [6] 朱彬, 陳志軍.DTO模式的研究及對其實現(xiàn)的改進(jìn)[J].沈陽航空航天大學(xué)學(xué)報,2004,21(4):53-55.

      [7] 郭睿志, 邊力, 譚龍丹,等.數(shù)據(jù)庫查詢中LINQtoEntities應(yīng)用研究[J].軟件導(dǎo)刊,2014(1):122-124.

      [8] 高靜, 段會川.JSON數(shù)據(jù)傳輸效率研究[J].計算機工程與設(shè)計,2011,32(7):2267-2270.

      [9]ALLENJ.Json.NETclaimssignificantperformanceimprovementsoverother.NETSerializers[J].InfoQ,2010.

      [10] 易俗, 殷慧文.基于ExtJS的富客戶端聯(lián)通分銷商管理系統(tǒng)設(shè)計[J].遼寧大學(xué)學(xué)報(自然科學(xué)版),2015,42(2):143-149.

      Model-driven design and implementation of the budget management system

      GuoNingyuan,XuJianliang

      (CollegeofInformationScience&Engineering,OceanUniversityofChina,Qingdao266100,China)

      Aimingatthedomainconceptsandcomplexrequirementsoffinancialbudget,thispaperputsamethodofmodel-drivendevelopmentpracticeinthedesignandimplementationofthebudgetmanagementsystem.Thismethodmakesdevelopersgetridofthecomplexdatabasedesign,andfocusontheabsorptionofdomainconcepts,modelsandthecreationofadatatransferobject.Thispaperpresentstheoveralldescriptionandframeworkofbudgetmanagementsystemstructure,andintroducesthedesignandimplementationofeachlayeraccordingtothedevelopmentorder.Finally,combiningwiththeapplicationeffectofsystemitshowsthefeasibility,convenienceandrapidityofusingthismethodofmodel-drivendevelopment.

      budgetmanagement;informationsystem;EntityFramework;ModelFirst;DTO;multi-layerarchitecture;JSON

      TP

      ADOI: 10.19358/j.issn.1674- 7720.2016.22.003

      郭寧遠(yuǎn),徐建良.模型驅(qū)動的預(yù)算管理系統(tǒng)設(shè)計與實現(xiàn)[J].微型機與應(yīng)用,2016,35(22):11-14.

      2016-05-25)

      郭寧遠(yuǎn)(1990-),男,碩士研究生,主要研究方向:軟件工程與智能信息系統(tǒng)。

      徐建良(1969-),男,博士,教授,主要研究方向:計算復(fù)雜性理論、計算機軟件與理論。

      猜你喜歡
      子課題序列化開發(fā)人員
      河北省水文工程地質(zhì)勘查院國家重點研發(fā)計劃項目子課題順利通過專家評審驗收
      如何建構(gòu)序列化閱讀教學(xué)
      甘肅教育(2020年14期)2020-09-11 07:58:36
      小學(xué)數(shù)學(xué)學(xué)生自主能力培養(yǎng)研究
      在學(xué)科教學(xué)中培養(yǎng)自學(xué)能力的研究
      小學(xué)數(shù)學(xué)學(xué)生自主能力培養(yǎng)研究
      Semtech發(fā)布LoRa Basics 以加速物聯(lián)網(wǎng)應(yīng)用
      Java 反序列化漏洞研究
      讓W(xué)indows 10進(jìn)入開發(fā)者模式
      電腦迷(2015年12期)2015-04-29 23:22:51
      后悔了?教你隱藏開發(fā)人員選項
      電腦愛好者(2015年6期)2015-04-03 01:20:56
      作文訓(xùn)練微格化、序列化初探
      語文知識(2015年12期)2015-02-28 22:02:15
      上杭县| 乃东县| 西安市| 巨鹿县| 神农架林区| 全椒县| 藁城市| 深圳市| 昭通市| 满城县| 梁平县| 淮阳县| 文成县| 米泉市| 鹤壁市| 兴文县| 稷山县| 昭觉县| 湘阴县| 酉阳| 文水县| 中西区| 合水县| 太和县| 石屏县| 滦南县| 虞城县| 沧州市| 平泉县| 河南省| 莱州市| 铜陵市| 手机| 高唐县| 普定县| 财经| 那坡县| 宁强县| 石林| 泰安市| 城口县|