999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2015-08-07 12:11:15陳正鳴
微處理機(jī) 2015年5期
關(guān)鍵詞:模型

徐 歡,陳正鳴,王 沖,2

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

·微機(jī)軟件·

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

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

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

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

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

1 引 言

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

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

2 代碼生成方法整體介紹

設(shè)計(jì)思路借鑒了MDA模型驅(qū)動(dòng)架構(gòu)的思想,首先進(jìn)行業(yè)務(wù)過程模型和數(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)在于:模型的確定、模板文件的編寫、對(duì)工作流模型的解析,配合模型的模板數(shù)據(jù)結(jié)構(gòu)建立等幾個(gè)方面。

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

模型驅(qū)動(dòng)是一種以建模和模型轉(zhuǎn)換為主要途徑的軟件開發(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ù)過程進(jìn)行建模,也就是建立工作流模型的過程。可以自己定義流程描述語言的規(guī)則,也可以用現(xiàn)有的描述語言。選用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查詢語言活動(dòng))和SQL(結(jié)構(gòu)化查詢語言)等。使用流程建模軟件jBPM繪制圖形化流程,它能同時(shí)生成XML格式的流程描述語言。

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

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

數(shù)據(jù)模型是數(shù)據(jù)特征的抽象,是數(shù)據(jù)庫系統(tǒng)中用以提供信息表示和操作手段的形式構(gòu)架。部分必須的數(shù)據(jù)模型如圖1所示,其中sysRole為角色表;users為用戶表;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ù)過程中所涉及到的數(shù)據(jù)以表的形式保存在數(shù)據(jù)庫中,數(shù)據(jù)庫作為業(yè)務(wù)過程系統(tǒng)的支撐,在流程運(yùn)轉(zhuǎn)中起記錄和存儲(chǔ)的作用。

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

3.2.1 流程模型

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

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

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

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

3.2.2 數(shù)據(jù)類模型

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

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

此處平臺(tái)相關(guān)的數(shù)據(jù)模型,由代碼生成器實(shí)現(xiàn),采用全自動(dòng)方式進(jìn)行構(gòu)建。只需提供數(shù)據(jù)庫中對(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è)頁面布局中,采用了邊緣布局,將整個(gè)Web頁面分為上下左右中五個(gè)部分。主要用到了上、左、中、右四個(gè)部分。上部是系統(tǒng)標(biāo)題,左部是導(dǎo)航菜單,中間顯示對(duì)應(yīng)操作的表格信息和操作按鈕,右邊為流程圖實(shí)例。

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

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

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

根據(jù)模型驅(qū)動(dòng)的思想,使用模板將平臺(tái)獨(dú)立模型轉(zhuǎn)化為平臺(tái)相關(guān)模型。模板的功能主要是對(duì)平臺(tái)相關(guān)模型的定義,通過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ù)生成文本并輸出,不過它的以下一些特性使得它在Web程序中應(yīng)用比較廣泛,如通用數(shù)據(jù)模型(Java對(duì)象通過插件式對(duì)象封裝,以變量方式在模板中顯示,可使用抽象(接口)方式表示);強(qiáng)大的模板語言(有自己的指令,模板控制能力強(qiáng),還有自己的命名空間避免名字的沖突);簡(jiǎn)單的Web顯示(分離可視化設(shè)計(jì)和應(yīng)用程序邏輯,分離頁面設(shè)計(jì)員和程序員);強(qiáng)大的XML處理能力。XML是業(yè)務(wù)過程的描述語言,因此用FreeMarker模板有較大優(yōu)勢(shì)。

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

4.2.1 流程類模型的模板

第一步:解析流程

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

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

FreeMarker解析流程XML的方法:首先,F(xiàn)reeMarker中的parse方法將把用來描述業(yè)務(wù)過程的XML文件處理成map樹狀結(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)無關(guān)類。如對(duì)Task節(jié)點(diǎn)建立Task類,針對(duì)Decision節(jié)點(diǎn)建立Decision類等。以常用的Task節(jié)點(diǎn)為例,圖7為其平臺(tái)無關(guān)模型的類結(jié)構(gòu)圖,其中Transition為節(jié)點(diǎn)間的連接。

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

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

第二步:組織建模

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

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

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

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

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

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

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

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

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

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

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

對(duì)每一張表建立邏輯行為CRUD,以Dao命名。下列代碼以增加一條記錄的方法為例,說明邏輯行為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ù)庫訪問和處理數(shù)據(jù)Dao類的流程Dao類進(jìn)行建立。而模型層完成業(yè)務(wù)邏輯和數(shù)據(jù)訪問操作,該模板在上一節(jié)中數(shù)據(jù)類模型的模板已經(jīng)介紹過,本節(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)限決定了頁面相關(guān)的表及要顯示的內(nèi)容,而Task的Transition連接線屬性決定了可以執(zhí)行的操作,體現(xiàn)在圖層即頁面上的按鈕。根據(jù)Task連接線的數(shù)量決定按鈕的數(shù)量;連接線的name屬性決定了按鈕上的內(nèi)容。對(duì)應(yīng)于Button模型的三個(gè)屬性分別是:Text代表按鈕上的文字,即連接線屬性name的值;url屬性是要請(qǐng)求的地址,指一個(gè)對(duì)請(qǐng)求處理的action,命名格式為“節(jié)點(diǎn)名_連接線名”。

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

4.3.2 控制層

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

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

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

(1)Struts2配置文件模板

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

(2)Action類模板

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

(3)WorkFlowServer模板

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

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

圖9 流程條判斷示意圖

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

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

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

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

以《某公司工單系統(tǒng)》為例,驗(yàn)證此方法的有效性。應(yīng)用實(shí)例在myeclipse10環(huán)境下進(jìn)行,使用jBPM插件建立工作流模型,并添加了FreeMarker的jar包,數(shù)據(jù)庫使用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ù)建模基于SQL Server數(shù)據(jù)庫完成,建立流程所需用到的各種數(shù)據(jù)類型表,包括各個(gè)用戶的用戶名、密碼、權(quán)限,工單名稱、狀態(tài)等。使用Java的插件jBPM完成流程建模,保存對(duì)應(yīng)的XML文件,用于后續(xù)步驟。

5.2 代碼生成

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

6 結(jié)束語

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

猜你喜歡
模型
一半模型
一種去中心化的域名服務(wù)本地化模型
適用于BDS-3 PPP的隨機(jī)模型
提煉模型 突破難點(diǎn)
函數(shù)模型及應(yīng)用
p150Glued在帕金森病模型中的表達(dá)及分布
函數(shù)模型及應(yīng)用
重要模型『一線三等角』
重尾非線性自回歸模型自加權(quán)M-估計(jì)的漸近分布
3D打印中的模型分割與打包
主站蜘蛛池模板: 国产欧美日韩va| 美女毛片在线| 女人一级毛片| 国产精品国产三级国产专业不| 国产视频大全| 亚洲爱婷婷色69堂| 亚洲成在线观看| 国产一级毛片高清完整视频版| 人妻出轨无码中文一区二区| 欧美、日韩、国产综合一区| 欧美劲爆第一页| 伊大人香蕉久久网欧美| 欧美色丁香| 国产精品区视频中文字幕| 欧美色丁香| 亚洲va欧美va国产综合下载| 欧美日韩国产在线观看一区二区三区| 伊人久久大香线蕉影院| 制服丝袜亚洲| 日韩欧美国产综合| 欧美一级在线| 成人午夜在线播放| 欧美在线中文字幕| 免费 国产 无码久久久| 国产va免费精品观看| 亚洲精品不卡午夜精品| 高清无码不卡视频| 国产精品尤物在线| 亚洲第一视频网站| 538精品在线观看| 免费一级无码在线网站 | 亚洲色图综合在线| 日韩欧美视频第一区在线观看| 国产网友愉拍精品视频| 国产午夜精品一区二区三| 浮力影院国产第一页| 久久不卡国产精品无码| 黄色网站不卡无码| 少妇人妻无码首页| 亚洲视频在线观看免费视频| 超碰精品无码一区二区| 久久美女精品国产精品亚洲| 亚洲三级a| 精品无码人妻一区二区| 亚洲成aⅴ人片在线影院八| 午夜国产精品视频黄| 久久精品中文无码资源站| 精品国产香蕉在线播出| 狠狠色婷婷丁香综合久久韩国| 国产精品久久久久久影院| 青草视频在线观看国产| 亚洲第一页在线观看| 亚洲精品高清视频| 国产在线观看91精品| 成人国产免费| 一区二区三区成人| 国产精品xxx| 精品一区二区三区自慰喷水| 国产精品亚洲一区二区在线观看| 国产一区二区色淫影院| av一区二区无码在线| 99视频在线免费| 国产免费网址| 91精品国产情侣高潮露脸| 69av免费视频| 亚洲精品欧美日韩在线| 国产激情影院| 国产免费自拍视频| 亚洲一区二区三区在线视频| a毛片免费观看| 亚洲另类色| 青青国产在线| 国产精品19p| 秋霞一区二区三区| 先锋资源久久| 国产自视频| 夜色爽爽影院18禁妓女影院| 色天天综合久久久久综合片| 久久综合九九亚洲一区| 国产一区二区人大臿蕉香蕉| 国产成在线观看免费视频| 久久99国产乱子伦精品免|