亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種面向業(yè)務(wù)過(guò)程的軟件代碼生成方法

        2015-08-07 12:11:15陳正鳴
        微處理機(jī) 2015年5期
        關(guān)鍵詞:代碼生成數(shù)據(jù)模型視圖

        徐 歡,陳正鳴,王 沖,2

        (1.河海大學(xué)物聯(lián)網(wǎng)工程學(xué)院,常州213022;2.河海大學(xué)計(jì)算機(jī)與信息學(xué)院,南京211100)

        ·微機(jī)軟件·

        一種面向業(yè)務(wù)過(guò)程的軟件代碼生成方法

        徐 歡1,陳正鳴1,王 沖1,2

        (1.河海大學(xué)物聯(lián)網(wǎng)工程學(xué)院,常州213022;2.河海大學(xué)計(jì)算機(jī)與信息學(xué)院,南京211100)

        為了提高業(yè)務(wù)流程軟件的開(kāi)發(fā)效率,提出了一種面向業(yè)務(wù)過(guò)程的軟件代碼生成方法。通過(guò)使用基于模板的代碼生成引擎FreeMarker和建立描述業(yè)務(wù)過(guò)程的工作流模型,設(shè)計(jì)了一種代碼生成方法。方法按照MVC的軟件體系結(jié)構(gòu)設(shè)計(jì)模板,對(duì)建立的工作流模型和數(shù)據(jù)模型進(jìn)行轉(zhuǎn)換,生成模型層Java代碼和視圖層extjs代碼,并結(jié)合流程生成相應(yīng)的控制層代碼,完成了自動(dòng)生成面向業(yè)務(wù)過(guò)程的模型層、視圖層和控制層代碼的功能。應(yīng)用實(shí)例的實(shí)現(xiàn)驗(yàn)證了該方法的可行性和有效性。

        工作流;代碼生成;模板引擎FreeMarker;業(yè)務(wù)過(guò)程;模型驅(qū)動(dòng)架構(gòu);模型

        1 引 言

        各種業(yè)務(wù)過(guò)程軟件有很多相似之處,盡管這些軟件的具體業(yè)務(wù)功能和業(yè)務(wù)過(guò)程不盡相同,但是從軟件工程的角度看來(lái),它們的軟件結(jié)構(gòu)是大致相同的[1],因此,在開(kāi)發(fā)這類(lèi)系統(tǒng)時(shí),軟件復(fù)用和軟件自動(dòng)化思想得到了很大發(fā)展。傳統(tǒng)的業(yè)務(wù)過(guò)程軟件開(kāi)發(fā)方式存在很多不足之處,主要表現(xiàn)為[2]:效率低、開(kāi)發(fā)周期長(zhǎng)、大量的重復(fù)代碼。由底層設(shè)計(jì)和編碼驅(qū)動(dòng)的傳統(tǒng)軟件開(kāi)發(fā)技術(shù)已經(jīng)越來(lái)越無(wú)法滿(mǎn)足企業(yè)業(yè)務(wù)過(guò)程的不斷變化以及及時(shí)變更的需求。代碼生成技術(shù)可大幅提高軟件開(kāi)發(fā)質(zhì)量和生產(chǎn)率,降低軟件開(kāi)發(fā)風(fēng)險(xiǎn)?,F(xiàn)有的代碼生成器一般針對(duì)特定的框架生成代碼,無(wú)法體現(xiàn)業(yè)務(wù)過(guò)程,使用不夠靈活等?,F(xiàn)代業(yè)務(wù)過(guò)程軟件的設(shè)計(jì)更多的是對(duì)軟件框架和業(yè)務(wù)過(guò)程的綜合設(shè)計(jì)與實(shí)現(xiàn)。

        綜合考慮軟件業(yè)務(wù)過(guò)程和軟件框架進(jìn)行軟件設(shè)計(jì),先建立描述業(yè)務(wù)過(guò)程的工作流模型,再結(jié)合代碼生成器將該模型進(jìn)行轉(zhuǎn)化,生成為Java代碼。使用XML流程語(yǔ)言描述業(yè)務(wù)過(guò)程模型,通過(guò)JBPM流程引擎建立工作流模型,它可以提供圖形化流程設(shè)計(jì)工具,并自動(dòng)生成XML格式的描述。而在代碼生成器的選擇上,選用FreeMarker模板引擎,這是一個(gè)基于模板生成文本輸出的通用工具,使用純Java編寫(xiě),可用來(lái)生成HTMLWeb頁(yè)面、XML、Java源代碼等各種文本。

        2 代碼生成方法整體介紹

        設(shè)計(jì)思路借鑒了MDA模型驅(qū)動(dòng)架構(gòu)的思想,首先進(jìn)行業(yè)務(wù)過(guò)程模型和數(shù)據(jù)模型設(shè)計(jì),確定平臺(tái)獨(dú)立模型;然后設(shè)計(jì)平臺(tái)相關(guān)模型的模板,將平臺(tái)獨(dú)立模型轉(zhuǎn)換為平臺(tái)相關(guān)模型;最后設(shè)計(jì)目標(biāo)代碼模板,按照MVC的框架設(shè)計(jì),包括模型層模板(model)、視圖層模板(view)、控制層模板(controller),將平臺(tái)相關(guān)模型轉(zhuǎn)化為相應(yīng)的代碼模塊,實(shí)現(xiàn)整個(gè)目標(biāo)平臺(tái)代碼。

        此方法的難點(diǎn)在于:模型的確定、模板文件的編寫(xiě)、對(duì)工作流模型的解析,配合模型的模板數(shù)據(jù)結(jié)構(gòu)建立等幾個(gè)方面。

        3 模型設(shè)計(jì)

        模型驅(qū)動(dòng)是一種以建模和模型轉(zhuǎn)換為主要途徑的軟件開(kāi)發(fā)方法,建模指平臺(tái)獨(dú)立模型的構(gòu)建,還要確定平臺(tái)相關(guān)模型設(shè)計(jì),這一節(jié)將先從這兩個(gè)方面進(jìn)行描述。

        3.1 平臺(tái)獨(dú)立模型

        平臺(tái)獨(dú)立模型包括基于事務(wù)流程的工作流模型設(shè)計(jì)和與數(shù)據(jù)相關(guān)的數(shù)據(jù)模型設(shè)計(jì)。

        3.1.1 工作流模型

        工作流(Workflow)就是工作流程的計(jì)算模型,工作流對(duì)流程有較強(qiáng)的描述能力。對(duì)業(yè)務(wù)過(guò)程進(jìn)行建模,也就是建立工作流模型的過(guò)程??梢宰约憾x流程描述語(yǔ)言的規(guī)則,也可以用現(xiàn)有的描述語(yǔ)言。選用JPDL(JBoss JBPM Proeess Dnefinition Language)描述流程,它提供多種流轉(zhuǎn)控制節(jié)點(diǎn):Task(人工任務(wù))節(jié)點(diǎn)、State(狀態(tài))節(jié)點(diǎn)、Decision(判斷)節(jié)點(diǎn)、Fork-Join(分支-聚合)節(jié)點(diǎn)和Custom(自定義)節(jié)點(diǎn)等,還提供自動(dòng)活動(dòng),如Java(程序活動(dòng))、script(腳本活動(dòng))、hql(Hibernate查詢(xún)語(yǔ)言活動(dòng))和SQL(結(jié)構(gòu)化查詢(xún)語(yǔ)言)等。使用流程建模軟件jBPM繪制圖形化流程,它能同時(shí)生成XML格式的流程描述語(yǔ)言。

        業(yè)務(wù)過(guò)程建模是整個(gè)軟件設(shè)計(jì)的最開(kāi)始部分,要將流程描述語(yǔ)言生成為目標(biāo)平臺(tái)的運(yùn)行程序,業(yè)務(wù)過(guò)程描述中要包含當(dāng)前業(yè)務(wù)準(zhǔn)確的需求定義,且要兼?zhèn)錁I(yè)務(wù)過(guò)程和程序過(guò)程這兩個(gè)特征。程序過(guò)程即在模型里表示出這段業(yè)務(wù)在程序中調(diào)用的界面或調(diào)用的方法或限定條件。另外,每個(gè)節(jié)點(diǎn)的<name>屬性要確保唯一性,即命名時(shí)不重復(fù),避免解析時(shí)發(fā)生混亂。連接線(xiàn)的名稱(chēng)一般為操作名,若連接線(xiàn)無(wú)對(duì)應(yīng)操作(如判斷節(jié)點(diǎn)后的連接線(xiàn)),則命名為條件Yes或No等。工作流模型建立完成后保存為.XML格式,它是一種平臺(tái)無(wú)關(guān)的模型。

        3.1.2 數(shù)據(jù)模型

        數(shù)據(jù)模型是數(shù)據(jù)特征的抽象,是數(shù)據(jù)庫(kù)系統(tǒng)中用以提供信息表示和操作手段的形式構(gòu)架。部分必須的數(shù)據(jù)模型如圖1所示,其中sysRole為角色表;users為用戶(hù)表;Event為事件表;Event_State為事務(wù)狀態(tài)列表;Event_Operator為事件可進(jìn)行的操作列表;Organisa_tion為權(quán)限表;Partition_Operate_Log為流程日志。這些表是所有事務(wù)的通用數(shù)據(jù),當(dāng)然針對(duì)各個(gè)不同的業(yè)務(wù)還需要構(gòu)建其他相應(yīng)的數(shù)據(jù)模型。

        圖1 數(shù)據(jù)模型結(jié)構(gòu)圖示例

        將業(yè)務(wù)過(guò)程中所涉及到的數(shù)據(jù)以表的形式保存在數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)作為業(yè)務(wù)過(guò)程系統(tǒng)的支撐,在流程運(yùn)轉(zhuǎn)中起記錄和存儲(chǔ)的作用。

        3.2 平臺(tái)相關(guān)模型

        3.2.1 流程模型

        流程中的連接線(xiàn)是決定控制層的關(guān)鍵,其節(jié)點(diǎn)又涉及模型層相關(guān)的業(yè)務(wù)邏輯,因此需建立流程模型,并建立對(duì)象,為生成控制層做準(zhǔn)備。將一條連接線(xiàn)以及與這條連接線(xiàn)相關(guān)聯(lián)的兩個(gè)節(jié)點(diǎn)作為一個(gè)模型塊,代表著一段流程信息,圖2顯示了一個(gè)模型塊結(jié)構(gòu)。

        如圖2所示,一個(gè)模型塊由名稱(chēng)、節(jié)點(diǎn)實(shí)體和節(jié)點(diǎn)的邏輯行為三個(gè)部分組成。名稱(chēng)是模型的唯一標(biāo)示,由起始節(jié)點(diǎn)名和連接線(xiàn)名共同組成;節(jié)點(diǎn)實(shí)體對(duì)應(yīng)該節(jié)點(diǎn)的名稱(chēng)、類(lèi)型等所有信息;邏輯行為指該節(jié)點(diǎn)的此條連線(xiàn)對(duì)應(yīng)的操作行為,調(diào)用增、刪、改等基礎(chǔ)操作完成。

        圖2 流程模型塊結(jié)構(gòu)圖

        對(duì)流程節(jié)點(diǎn)建立WorkflowModel和Workflow Item類(lèi),WorkflowModel類(lèi)的屬性有:Type(節(jié)點(diǎn)類(lèi)型),Size(節(jié)點(diǎn)數(shù)量),<list>Node(節(jié)點(diǎn)對(duì)象列表);而Workflow Item是對(duì)model中一個(gè)節(jié)點(diǎn)的具體化,按不同節(jié)點(diǎn)分為T(mén)ask、Decision等,除了公共屬性Name和<list>Transition外,每種item都有其各自的屬性。

        3.2.2 數(shù)據(jù)類(lèi)模型

        建立數(shù)據(jù)類(lèi)模型Bean和數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象類(lèi)Dao,來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,即建立數(shù)據(jù)的模型層模型,包括模型的名稱(chēng)、邏輯行為和操作實(shí)體三個(gè)部分。名稱(chēng)是模型的唯一標(biāo)示;邏輯行為指對(duì)數(shù)據(jù)的操作行為,比如增、刪、改、查等;操作實(shí)體主要指的是對(duì)數(shù)據(jù)庫(kù)操作的表的實(shí)體或者是一個(gè)視圖,主要包含了表元信息,即表名稱(chēng)、表中各個(gè)數(shù)據(jù)字段名稱(chēng)和類(lèi)型等信息。模型結(jié)構(gòu)如圖3所示。

        圖3 數(shù)據(jù)類(lèi)模型的結(jié)構(gòu)圖

        此處平臺(tái)相關(guān)的數(shù)據(jù)模型,由代碼生成器實(shí)現(xiàn),采用全自動(dòng)方式進(jìn)行構(gòu)建。只需提供數(shù)據(jù)庫(kù)中對(duì)應(yīng)的表名,代碼生成器就會(huì)實(shí)現(xiàn)該數(shù)據(jù)模型的建立。

        3.2.3 視圖層設(shè)計(jì)

        視圖層設(shè)計(jì)采用了大多數(shù)管理系統(tǒng)的傳統(tǒng)設(shè)計(jì),如圖4所示。

        圖4 視圖層布局設(shè)計(jì)

        在整個(gè)頁(yè)面布局中,采用了邊緣布局,將整個(gè)Web頁(yè)面分為上下左右中五個(gè)部分。主要用到了上、左、中、右四個(gè)部分。上部是系統(tǒng)標(biāo)題,左部是導(dǎo)航菜單,中間顯示對(duì)應(yīng)操作的表格信息和操作按鈕,右邊為流程圖實(shí)例。

        除了視圖層的基本框架設(shè)計(jì),對(duì)視圖中顯示的內(nèi)容以及按鈕功能等細(xì)節(jié)部分,在解析流程后完成。

        4 模板設(shè)計(jì)

        模型到代碼的轉(zhuǎn)換,離不開(kāi)模板的支撐作用,同時(shí)還需要模板引擎在轉(zhuǎn)化過(guò)程中起主導(dǎo)作用。使用FreeMarker模板引擎作為代碼生成器的核心技術(shù)。

        根據(jù)模型驅(qū)動(dòng)的思想,使用模板將平臺(tái)獨(dú)立模型轉(zhuǎn)化為平臺(tái)相關(guān)模型。模板的功能主要是對(duì)平臺(tái)相關(guān)模型的定義,通過(guò)FreeMarker模板引擎,將平臺(tái)獨(dú)立的模型填充到模板中,生成平臺(tái)相關(guān)的模型。在目標(biāo)代碼的生成中,模板主要應(yīng)用在平臺(tái)相關(guān)模型到目標(biāo)代碼轉(zhuǎn)化,最后稍加修改,實(shí)現(xiàn)完整需求。

        4.1 FreeMarker模板引擎

        代碼生成器FreeMarker的使用可以歸結(jié)為:模板+數(shù)據(jù)模型=輸出,基本原理模型如圖5所示。

        圖5 FreeMarker原理模型

        其中,“模板/模式”指的是代碼自動(dòng)生成中的不變關(guān)系或模式,作為模板使用?!霸獢?shù)據(jù)”是描述數(shù)據(jù)的數(shù)據(jù),能完整描述輸入文件的信息,元數(shù)據(jù)即數(shù)據(jù)模型和工作流模型。

        FreeMarker負(fù)責(zé)提取底層數(shù)據(jù)生成文本并輸出,不過(guò)它的以下一些特性使得它在Web程序中應(yīng)用比較廣泛,如通用數(shù)據(jù)模型(Java對(duì)象通過(guò)插件式對(duì)象封裝,以變量方式在模板中顯示,可使用抽象(接口)方式表示);強(qiáng)大的模板語(yǔ)言(有自己的指令,模板控制能力強(qiáng),還有自己的命名空間避免名字的沖突);簡(jiǎn)單的Web顯示(分離可視化設(shè)計(jì)和應(yīng)用程序邏輯,分離頁(yè)面設(shè)計(jì)員和程序員);強(qiáng)大的XML處理能力。XML是業(yè)務(wù)過(guò)程的描述語(yǔ)言,因此用FreeMarker模板有較大優(yōu)勢(shì)。

        4.2 平臺(tái)相關(guān)模型的模板設(shè)計(jì)

        4.2.1 流程類(lèi)模型的模板

        第一步:解析流程

        XML語(yǔ)言的特點(diǎn)是它的樹(shù)狀結(jié)構(gòu),如圖6所示,顯示了一個(gè)工作流程的部分業(yè)務(wù)過(guò)程的XML樹(shù)狀結(jié)構(gòu),Process是一個(gè)根節(jié)點(diǎn),start、task、end是它的子節(jié)點(diǎn)。

        圖6 流程XML的樹(shù)狀結(jié)構(gòu)

        FreeMarker解析流程XML的方法:首先,F(xiàn)reeMarker中的parse方法將把用來(lái)描述業(yè)務(wù)過(guò)程的XML文件處理成map樹(shù)狀結(jié)構(gòu)的模型;然后FreeMarker提供了recurse指令,按XML的層定義為宏,宏名即節(jié)點(diǎn)名,如<#macro task>定義了Task節(jié)點(diǎn)的宏;再用recurse循環(huán)調(diào)用處理子節(jié)點(diǎn)的宏,處理函數(shù)。

        為了解析和存儲(chǔ)業(yè)務(wù)流程,針對(duì)不同的流程節(jié)點(diǎn)需建立不同的平臺(tái)無(wú)關(guān)類(lèi)。如對(duì)Task節(jié)點(diǎn)建立Task類(lèi),針對(duì)Decision節(jié)點(diǎn)建立Decision類(lèi)等。以常用的Task節(jié)點(diǎn)為例,圖7為其平臺(tái)無(wú)關(guān)模型的類(lèi)結(jié)構(gòu)圖,其中Transition為節(jié)點(diǎn)間的連接。

        圖7 流程節(jié)點(diǎn)的平臺(tái)無(wú)關(guān)類(lèi)結(jié)構(gòu)圖

        如圖7所示,一個(gè)Task節(jié)點(diǎn)有四個(gè)變量:name為節(jié)點(diǎn)名;type為類(lèi)型;expression為類(lèi)型的具體描述;transition為轉(zhuǎn)移到下一個(gè)節(jié)點(diǎn)的連線(xiàn),用<list>保存。

        第二步:組織建模

        組織建模又叫權(quán)限管理,即任務(wù)的分配者。組織建模的目的是為了明確完成每個(gè)任務(wù)的對(duì)象。如果沒(méi)有在建立數(shù)據(jù)模型時(shí)建立權(quán)限表,就需要在業(yè)務(wù)流程中讀出這些信息,并保存到數(shù)據(jù)庫(kù)中。在jPDL流程定義語(yǔ)言中,task一般用來(lái)處理涉及人機(jī)交互的活動(dòng),因此通過(guò)分析流程描述中的Task節(jié)點(diǎn),就能得到任務(wù)的分配或候選人。Task有Type和Expression,Type表示類(lèi)型,有四個(gè)值可選:assignee表示指定到用戶(hù),candidate-groups指定到用戶(hù)組列表,candidate-users指定到用戶(hù)列表和swimlane任務(wù)泳道,Expression表示該類(lèi)型對(duì)應(yīng)的描述。

        在對(duì)Task命名時(shí),需保證Task的名稱(chēng)是唯一的,且為這一步的操作名。在第一步解析流程的操作中已將所有Task內(nèi)容保存,第二步只需取出數(shù)據(jù),建立對(duì)應(yīng)權(quán)限表并將數(shù)據(jù)持久化到數(shù)據(jù)庫(kù)中即可。

        第三步:生成平臺(tái)相關(guān)模型

        平臺(tái)相關(guān)的流程模型以模型塊為單位,用WorkflowModel保存所有節(jié)點(diǎn)信息。節(jié)點(diǎn)的具體化item由對(duì)應(yīng)不同的Task類(lèi)、Decision類(lèi)等類(lèi)完成。將每一個(gè)節(jié)點(diǎn)保存為對(duì)應(yīng)的類(lèi),再將所有節(jié)點(diǎn)的節(jié)點(diǎn)名和對(duì)應(yīng)類(lèi)型及數(shù)量保存到WorkflowModel中。下面以Task節(jié)點(diǎn)為例說(shuō)明建立Task類(lèi)對(duì)象的方法。

        由模型塊的定義可知,模型塊的數(shù)量與流程連接線(xiàn)的數(shù)量相等。遍歷各個(gè)節(jié)點(diǎn)的所有連線(xiàn),將該節(jié)點(diǎn)、連線(xiàn)以及下一節(jié)點(diǎn)信息保存到一個(gè)模塊中,就完成了平臺(tái)相關(guān)模型的構(gòu)建。

        4.2.2 數(shù)據(jù)類(lèi)模型模板

        數(shù)據(jù)類(lèi)模型也可以稱(chēng)為模型層,它包含了最基礎(chǔ)的業(yè)務(wù)邏輯和數(shù)據(jù)訪(fǎng)問(wèn)操作。數(shù)據(jù)類(lèi)模型主要包括對(duì)應(yīng)表的操作實(shí)體和邏輯行為CRUD。建立模型的步驟如下:

        (1)使用JDBC連接數(shù)據(jù)庫(kù),通過(guò)所提供的表名找到對(duì)應(yīng)的表,通過(guò)函數(shù)getMetaData()得到結(jié)果集(rs)的結(jié)構(gòu),比如字段數(shù)、字段名、數(shù)據(jù)類(lèi)型等信息,并依次存入ArrayList類(lèi)型的columnList中;

        (2)創(chuàng)建模板,包括表對(duì)應(yīng)的實(shí)體模板、邏輯行為模板,模板見(jiàn)下文;

        (3)往模板中填充數(shù)據(jù),保存為文件。

        實(shí)體模板是對(duì)數(shù)據(jù)庫(kù)中的表建立實(shí)例對(duì)象,模板名為tableBean.ftl,代碼如下:

        對(duì)每一張表建立邏輯行為CRUD,以Dao命名。下列代碼以增加一條記錄的方法為例,說(shuō)明邏輯行為Create方法的模板:

        4.3 目標(biāo)代碼模板設(shè)計(jì)

        目標(biāo)平臺(tái)的代碼主要分為三個(gè)部分,分別是前臺(tái)視圖層和后臺(tái)模型層,以及負(fù)責(zé)連接的中間控制層。視圖層用ExtJS實(shí)現(xiàn),控制層模板的主要工作除了對(duì)Struts2框架中的Action進(jìn)行抽象建模,還要對(duì)調(diào)用數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)和處理數(shù)據(jù)Dao類(lèi)的流程Dao類(lèi)進(jìn)行建立。而模型層完成業(yè)務(wù)邏輯和數(shù)據(jù)訪(fǎng)問(wèn)操作,該模板在上一節(jié)中數(shù)據(jù)類(lèi)模型的模板已經(jīng)介紹過(guò),本節(jié)就不重復(fù)敘述。

        4.3.1 視圖層

        視圖層的實(shí)現(xiàn)技術(shù)眾多,選擇使用ExtJS構(gòu)建視圖層,使用FreeMarker模板引擎中Macro宏函數(shù)對(duì)模板進(jìn)行定義,使得模板更具有模塊性。由于篇幅限制,且視圖層的構(gòu)建非描述重點(diǎn),不做詳細(xì)描述,只闡述視圖層在面向業(yè)務(wù)流程設(shè)計(jì)中特殊的地方。

        Task是負(fù)責(zé)人工交互的部分,在視圖層中,要對(duì)Task節(jié)點(diǎn)中體現(xiàn)流程的細(xì)節(jié)進(jìn)行特別處理。權(quán)限決定了頁(yè)面相關(guān)的表及要顯示的內(nèi)容,而Task的Transition連接線(xiàn)屬性決定了可以執(zhí)行的操作,體現(xiàn)在圖層即頁(yè)面上的按鈕。根據(jù)Task連接線(xiàn)的數(shù)量決定按鈕的數(shù)量;連接線(xiàn)的name屬性決定了按鈕上的內(nèi)容。對(duì)應(yīng)于Button模型的三個(gè)屬性分別是:Text代表按鈕上的文字,即連接線(xiàn)屬性name的值;url屬性是要請(qǐng)求的地址,指一個(gè)對(duì)請(qǐng)求處理的action,命名格式為“節(jié)點(diǎn)名_連接線(xiàn)名”。

        分別完成單個(gè)節(jié)點(diǎn)的分頁(yè)面,將要顯示的表格頁(yè)面與按鈕結(jié)合即可成為完整模塊。

        4.3.2 控制層

        控制層用來(lái)捕獲請(qǐng)求并根據(jù)業(yè)務(wù)流程的流轉(zhuǎn)信息控制請(qǐng)求的轉(zhuǎn)發(fā),調(diào)用相應(yīng)的方法,由業(yè)務(wù)過(guò)程決定,對(duì)業(yè)務(wù)過(guò)程有著最好的表現(xiàn)力。選擇使用Struts2實(shí)現(xiàn),設(shè)計(jì)重點(diǎn)在Struts2配置文件的模板,對(duì)前臺(tái)請(qǐng)求處理的Action類(lèi)的模板以及調(diào)用數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)和處理Dao類(lèi)的流程Dao—WorkFlowServer類(lèi)模板。模板調(diào)用關(guān)系如下圖8所示。

        圖8 目標(biāo)平臺(tái)服務(wù)器端的模板調(diào)用關(guān)系圖

        圖8中,Struts模板完成配置文件;對(duì)前臺(tái)請(qǐng)求處理的Action類(lèi)調(diào)用流程Dao類(lèi),即WorkFlowServer,并由WorkFlowServer調(diào)用底層數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)和處理方法;TableBean為數(shù)據(jù)傳遞和存儲(chǔ)類(lèi)的模板;TableDao為數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)和處理類(lèi)的模板。下面詳細(xì)介紹前三種模板。

        (1)Struts2配置文件模板

        這里給出與流程相關(guān)配置的模板,其他的基礎(chǔ)配置及模板省略。

        (2)Action類(lèi)模板

        Action類(lèi)的作用:Struts2對(duì)Servlet請(qǐng)求進(jìn)行攔截,根據(jù)配置文件把請(qǐng)求派發(fā)到相應(yīng)的Action類(lèi)中行執(zhí)行,執(zhí)行Action類(lèi)中的execute函數(shù),完成控制。Execute函數(shù)返回的結(jié)果,決定了要跳轉(zhuǎn)的視圖和視圖中用到的值棧、OGNL表達(dá)式的值完成視圖的實(shí)現(xiàn)。上述過(guò)程的核心內(nèi)容是對(duì)Struts2進(jìn)行配置和部分POJO類(lèi)的編寫(xiě),利用模板自動(dòng)在服務(wù)器端生成請(qǐng)求處理Action模型。

        (3)WorkFlowServer模板

        WorkFlowServer是流程類(lèi)Dao方法,由Action類(lèi)調(diào)用。WorkFlowServer根據(jù)流程需求完成節(jié)點(diǎn)任務(wù),通過(guò)調(diào)用底層的數(shù)據(jù)操作類(lèi)Dao方法進(jìn)行數(shù)據(jù)信息的記錄和維護(hù)。流程的相關(guān)模型對(duì)每一個(gè)節(jié)點(diǎn)進(jìn)行了實(shí)例化,此時(shí)WorkFlowServer的模板需要對(duì)不同類(lèi)型的節(jié)點(diǎn)進(jìn)行相應(yīng)處理,使其完成流程功能,生成對(duì)應(yīng)的Dao代碼。

        每次Action的調(diào)用為一段流程條,每段流程條經(jīng)過(guò)的節(jié)點(diǎn)數(shù)為步長(zhǎng),步長(zhǎng)大于等于1。由于Decision為后臺(tái)處理節(jié)點(diǎn),不是人工處理,因此由計(jì)算機(jī)程序控制業(yè)務(wù)流轉(zhuǎn);而運(yùn)行到其他類(lèi)型的節(jié)點(diǎn)時(shí),這一段流程條操作結(jié)束。那么一段流程條的開(kāi)始節(jié)點(diǎn)為T(mén)ask或狀態(tài)節(jié)點(diǎn)State,終點(diǎn)為T(mén)ask、State或結(jié)束節(jié)點(diǎn)End。圖9顯示了流程條判斷及每步流程所需操作。

        圖9 流程條判斷示意圖

        每步流程都要進(jìn)行業(yè)務(wù)處理和底層數(shù)據(jù)操作的調(diào)用。不同流程操作的共同點(diǎn):在數(shù)據(jù)庫(kù)的Log表更新流程記錄,在State表更新事件狀態(tài)。不同點(diǎn):該步流程為Decision時(shí),在相應(yīng)的數(shù)據(jù)庫(kù)表中獲取所需變量的值,判斷流程使用哪一條連接線(xiàn)Transition,并判斷該連接線(xiàn)所指向的終點(diǎn)是否能作為這條程序條的終點(diǎn),若能,該程序條結(jié)束,不能則繼續(xù)跳轉(zhuǎn)到下一節(jié)點(diǎn)。

        另外,JPDL流程定義語(yǔ)言還支持使用自動(dòng)活動(dòng),如Java(程序活動(dòng))、script(腳本活動(dòng))、hql(Hibernate查詢(xún)語(yǔ)言活動(dòng))、sql(結(jié)構(gòu)化查詢(xún)語(yǔ)言活動(dòng)),在生成代碼時(shí)可手工直接引用,作為模型層操作。

        通過(guò)程序生成器對(duì)流程的梳理就能得到大部分的控制層操作代碼,對(duì)生成的代碼稍加整理就能得到完整的控制層代碼。

        5 應(yīng)用實(shí)例

        以《某公司工單系統(tǒng)》為例,驗(yàn)證此方法的有效性。應(yīng)用實(shí)例在myeclipse10環(huán)境下進(jìn)行,使用jBPM插件建立工作流模型,并添加了FreeMarker的jar包,數(shù)據(jù)庫(kù)使用SQL Server 2008,添加sqljdbc4.jar包作為jdbc的連接。

        實(shí)例的構(gòu)建包括五個(gè)方面,它們是數(shù)據(jù)建模、流程建模、視圖層構(gòu)建、模型層構(gòu)建和控制層構(gòu)建,完成了這5個(gè)步驟也就基本完成了應(yīng)用實(shí)例。

        5.1 數(shù)據(jù)準(zhǔn)備

        數(shù)據(jù)準(zhǔn)備包括數(shù)據(jù)建模和流程建模,數(shù)據(jù)建?;赟QL Server數(shù)據(jù)庫(kù)完成,建立流程所需用到的各種數(shù)據(jù)類(lèi)型表,包括各個(gè)用戶(hù)的用戶(hù)名、密碼、權(quán)限,工單名稱(chēng)、狀態(tài)等。使用Java的插件jBPM完成流程建模,保存對(duì)應(yīng)的XML文件,用于后續(xù)步驟。

        5.2 代碼生成

        代碼生成包括生成視圖層、模型層、控制層代碼。先使用FreeMarker解析描述業(yè)務(wù)過(guò)程的XML代碼,得到權(quán)限信息,利用模板生成部分視圖層代碼,將過(guò)程流轉(zhuǎn)信息和操作名保存在控制層代碼中,然后對(duì)數(shù)據(jù)庫(kù)中的表生成基于單表操作的視圖層和模型層代碼,整合修改部分模型層代碼,將操作的實(shí)現(xiàn)方法保存在模型層中。最后經(jīng)過(guò)少量修改,即可運(yùn)行該系統(tǒng)。具體操作如圖10所示。

        6 結(jié)束語(yǔ)

        提出了一種面向業(yè)務(wù)過(guò)程的軟件代碼生成方法,通過(guò)《某公司工單系統(tǒng)》案例證明了此方法是切實(shí)可行并能有效提高軟件開(kāi)發(fā)效率的。當(dāng)然此方法也存在一定的局限性,如考慮不夠充分,一些復(fù)雜的業(yè)務(wù)過(guò)程無(wú)法使用程序生成器自動(dòng)生成對(duì)應(yīng)代碼,需要手工改寫(xiě)代碼等。下一步工作的重點(diǎn)是充分考慮各種業(yè)務(wù)過(guò)程,進(jìn)一步完善此方法。

        圖10 目標(biāo)代碼生成流程圖

        [1] 周春燕.基于MDA的元模型軟件生成方法研究[D].南京:南京航空航天大學(xué),2011-01.

        Zhou Chun-yan.A Software Generation Method Based on MDA[D].Nanjing:Nanjing University of Aeronautics and Astronautic,2011-01.

        [2] 鮑志云.解析MDA[M].北京:人民郵電出版社,2004-2.

        Bao Zhi-yun.MDA Explained[M].Beijing:Posts&Telecom Press,2004-2.

        [3] 胡俊.用XML與Java創(chuàng)建程序生成器[M].北京:科學(xué)出版社,2003.

        Hu Jun.Program Generators with XML and Java[M].Beijing:Pearson Education,2003.

        [4] 徐世蓮.基于軟件體系結(jié)構(gòu)的WEB_M(jìn)IS應(yīng)用平臺(tái)設(shè)計(jì)[J].計(jì)算機(jī)科學(xué),2006,33(9):105-106,151.

        Xu Shi-lian.Design of theWEB_M(jìn)ISPlatform Based on Architechture[J].Computer Science,2006,33(9):105-106,151.

        [5] 王勇.業(yè)務(wù)構(gòu)件生成技術(shù)研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2007.

        Wang Yong.Research on Business Component Generation Technique[D].Harbin:Harbin Institute of Technology,2007.

        [6] 張立勇,陳平.基于代碼生成的Web信息系統(tǒng)工程化開(kāi)發(fā)方法[J].計(jì)算機(jī)科學(xué),2008(5):284-287.

        Zhang Li-yong,Chen Ping.Web Information System Construction Based on Code Generation[J].Computer Science,2008(5):284-287.

        [7] 余俊新,孫涌.J2EE中對(duì)象關(guān)系映射的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007(3):88-94.

        Yu Jun-xin,Sun Yong.Research and Implementation of Object Relation Mapping in J2EE[J].Computer Technology and Development,2007(3):88-94.

        [8] Krzysztof Czarnecki,Ulrich Eisencker.Generative Programing:Methods,Tools,and Applications[M].Addision-Wesly,2000.

        [9] H.Maruyama,K.Tamura,N.Uramoto.XML and Java,Developing Web applications[M].Addision-Wesley,1999.

        [10] 王正方,朱云龍.基于J2EE和業(yè)務(wù)定制功能的企業(yè)信息系統(tǒng)開(kāi)發(fā)平臺(tái)[J].信息與控制,2008,37(1):93-98.

        Wang Zheng-fang,Zhu Yun-long.A Development Platform of Enterprise Information System Based On J2EE and Business Customization Function[J].Information and Control,2008,37(1):93-98.

        [11] 李英軍,馬曉星,蔡敏.設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)(第2版)[M].北京:機(jī)械工業(yè)出版社,2001.

        Li Ying-Jun,Ma Xiao-Xing,Cai Min.Design Patterns:Elements of Reusable Object-Oriented software(second edition)[M].Beijing:Machinery Industry Press,2001.

        [12] 張錦.基于EJB組件的代碼自動(dòng)生成平臺(tái)的研究-代碼生成器及模板庫(kù)的設(shè)計(jì)[D].杭州:浙江工業(yè)大學(xué),2004.

        Zhang Jin.Research of Code Auto-Generation Platform Based On EJB-Design of Code Generator and Template Library[D].Hangzhou:Zhejiang University of Technology,2004.

        A Code Generation Method for Business Process

        Xu Huan1,Chen Zhengming1,Wang Chong1,2
        (1.College of Internet of Things Engineering,Hohai University,Changzhou 213022,China;2.College of Computer and Information,Hohai University,Nanjing 211100,China)

        In order to improve the development efficiency of business process software,a code generation method for business process,using the"template engine"FreeMarker to generate text output based on templates and the establishing the workflow model of business process,is proposed in this paper.According to the software architecture of MVC,the templates is designed to transform theworkflow model and datamodel for generating Java code ofmodel layer,extjs code of view layer and control layer with process.The function of auto codes generation inmodel layer,view layer and control are completed for business process.The application example proves that themethod is feasible and effective.

        Work flow;Code Generation;FreeMarker;Business process;MDA;Model

        10.3969/j.issn.1002-2279.2015.05.010

        TP311

        A

        1002-2279(2015)05-0035-08

        徐歡(1989-),女,江蘇省南通市人,碩士研究生,主研方向:計(jì)算機(jī)應(yīng)用。

        2015-03-04

        猜你喜歡
        代碼生成數(shù)據(jù)模型視圖
        Lustre語(yǔ)言可信代碼生成器研究進(jìn)展
        面板數(shù)據(jù)模型截面相關(guān)檢驗(yàn)方法綜述
        加熱爐爐內(nèi)跟蹤數(shù)據(jù)模型優(yōu)化
        5.3 視圖與投影
        視圖
        Y—20重型運(yùn)輸機(jī)多視圖
        SA2型76毫米車(chē)載高炮多視圖
        代碼生成技術(shù)在軟件開(kāi)發(fā)中的應(yīng)用
        電子世界(2016年15期)2016-08-29 02:14:28
        基于XML的代碼自動(dòng)生成工具
        電子科技(2015年2期)2015-12-20 01:09:20
        面向集成管理的出版原圖數(shù)據(jù)模型
        国产自偷自偷免费一区| 风韵人妻丰满熟妇老熟女视频| 无码毛片内射白浆视频| 在线精品国产一区二区三区| 曰韩精品无码一区二区三区| 人妻风韵犹存av中文字幕| 丝袜美腿在线观看一区| 国产精品伦一区二区三级视频| 老男人久久青草AV高清| 久久综合激激的五月天| 青青草小视频在线播放| 国产精品一区二区在线观看| 亚洲欧美日韩综合在线观看| 日韩精品少妇专区人妻系列| 亚洲桃色视频在线观看一区| 久久人人爽人人爽人人片av东京热 | 女性自慰网站免费看ww| 四虎在线中文字幕一区| 成人欧美一区二区三区黑人| 亚洲精品无码乱码成人| 国产一区二区三区韩国| 亚洲av少妇一区二区在线观看| 人妻 偷拍 无码 中文字幕| 成人片黄网站色大片免费观看app| 午夜一区二区三区在线视频| 亚洲最大在线视频一区二区| 五月综合激情婷婷六月色窝| 曰韩精品无码一区二区三区| 自拍偷拍亚洲视频一区二区三区| 亚洲av一二三区成人影片| 精品香蕉久久久爽爽| 无码人妻丰满熟妇区免费| 蜜臀av一区二区三区久久| 亚洲色爱免费观看视频| 亚洲线精品一区二区三区八戒| 国产黄片一区二区三区| 亚洲午夜成人精品无码色欲 | 蜜桃在线观看视频在线观看| 国产精品久久久福利| 少妇人妻真实偷人精品视频| 中文亚洲成a人片在线观看|