單文金 張 政 卞德志 胡昌平 胡翔宇
1(中國船舶集團有限公司第七一六研究所 江蘇 連云港 222006) 2(中船重工信息科技有限公司 江蘇 連云港 222006) 3(哈爾濱工程大學 黑龍江 哈爾濱 150001)
當前,《中國制造2025》已上升為國家戰(zhàn)略,是建設(shè)中國為制造強國的三個十年戰(zhàn)略中第一個十年的行動綱領(lǐng)[1]。船舶工業(yè)是《中國制造2025》中提出的十個重點行業(yè)之一,但是我國船舶領(lǐng)域企業(yè)信息化建設(shè)水平整體偏低,企業(yè)信息化建設(shè)需求急迫。在軟件規(guī)模不斷擴大、軟件復雜性不斷提高的信息化建設(shè)需求下,如何在提高軟件質(zhì)量的同時,縮短軟件建設(shè)周期,保證軟件穩(wěn)定性、維護性、可拓展性成為一個急需解決的難題。要解決這個難題,信息化建設(shè)企業(yè)必須具備快速支撐軟件上線實施的能力。企業(yè)在快速軟件建設(shè)時通常會面臨以下幾個問題:
1) 軟件開發(fā)周期短,穩(wěn)定性需求高:隨著當前信息化建設(shè)環(huán)境存在更高的需求急迫性,對于軟件的交付周期、軟件的穩(wěn)定性有著更高的期望。
2) 技術(shù)人員水平要求高:基于交付快速化、業(yè)務(wù)復雜化、性能穩(wěn)定化等需求,對于開發(fā)人員的技術(shù)水平能力要求不斷拔高。
3) 開發(fā)性價比低,大量的代碼重復建設(shè)造成了資源浪費:在實際的軟件開發(fā)中,在頁面端,存在大量的類似頁面,頁面布局和處理邏輯比較固定[2]。在服務(wù)端,基于面向?qū)ο蟮拈_發(fā)模式,每個對象的基礎(chǔ)服務(wù)代碼運行模式一致,從而帶來大量的重復代碼開發(fā)。
由此,行業(yè)內(nèi)需要一種可以快速可視化完成開發(fā)軟件的平臺來解決上述問題。目前市面上軟件可視化開發(fā)平臺大多專注于頁面設(shè)計,缺少頁面對應(yīng)服務(wù)的設(shè)計構(gòu)建,從而無法實現(xiàn)軟件頁面、服務(wù)整體結(jié)構(gòu)的開發(fā)。國外此類平臺主要代表作品有微軟的PowerApps[3],是一種基于主題的輕業(yè)務(wù)應(yīng)用構(gòu)建工具,PowerApps提供的功能雖然強大,但是在使用中會出現(xiàn)以下幾個問題:(1) 對微軟家族產(chǎn)品依賴性強,需要Office 365產(chǎn)品組件的支持。(2) 服務(wù)端由微軟云提供,如果自己搭建服務(wù)端,價格昂貴。(3) 軟件客戶端運行環(huán)境在Office下,平臺移植性差。國內(nèi)此類平臺主要代表作品有起步科技的牛道云,是一套基于云服務(wù)器的在線開發(fā)平臺。牛道云提供在線模板庫依賴引入開發(fā),在制作網(wǎng)站、移動App方面具有較強的優(yōu)勢,但在企業(yè)軟件開發(fā)方面具有以下幾個缺點:(1) 側(cè)重于互聯(lián)網(wǎng)應(yīng)用場景開發(fā),偏移動App設(shè)計風格。(2) 平臺價格授權(quán)按軟件收費,成本會很高。(3) 業(yè)務(wù)場景比較固定,拓展性弱,無法適應(yīng)船舶領(lǐng)域內(nèi)定制化需求。
針對當前船舶領(lǐng)域信息化建設(shè)需求急迫、軟件體量小而數(shù)量多的特殊性,市面常見的開發(fā)平臺所依賴的底層技術(shù)和支持的場景并不適用于船舶領(lǐng)域的信息化軟件快速構(gòu)建的特殊性需求?;诖耍疚奶岢鲆环N軟件可視化快速開發(fā)平臺,該平臺在船舶行業(yè)內(nèi)具有創(chuàng)先性。通過該平臺開發(fā)人員可以在線進行軟件的整體的構(gòu)建,以業(yè)務(wù)模型為構(gòu)建基礎(chǔ),進而進行整體軟件的在線開發(fā),可以極大縮減代碼甚至可以實現(xiàn)無代碼構(gòu)建完整的應(yīng)用軟件,縮短軟件開發(fā)周期,降低軟件開發(fā)門檻。并且已構(gòu)建的軟件創(chuàng)建的業(yè)務(wù)模型可以導入平臺模型庫,在其他軟件構(gòu)建時可以進行復用,避免重復的模型建設(shè),提高軟件開發(fā)效率。
軟件可視化快速開發(fā)平臺是一種基于頁面可視化配置引擎式快速構(gòu)建軟件的平臺,其總體架構(gòu)如圖1所示。自定義組件庫是平臺的基礎(chǔ),對象模型設(shè)計器、接口設(shè)計器、頁面設(shè)計器、執(zhí)行引擎是平臺的核心組件,基于設(shè)計器完成模型、接口、頁面的設(shè)計,通過運行執(zhí)行引擎完成模型解析、服務(wù)構(gòu)建、建表更新表、頁面編譯等操作。
1) 自定義組件庫:自定義組件庫提供大量開包即用的封裝組件以及設(shè)計器、引擎的底層實現(xiàn),是平臺實現(xiàn)快速開發(fā)的基礎(chǔ)。
2) 對象模型設(shè)計器:提供開發(fā)人員可視化方式實現(xiàn)構(gòu)建對象模型,對象模型是接口設(shè)計、頁面設(shè)計的信息來源,是構(gòu)建服務(wù)、表的基礎(chǔ)。
3) 接口設(shè)計器:提供開發(fā)人員可視化方式實現(xiàn)開發(fā)接口,通過設(shè)計器配置工具進行接口信息、接口輸入輸出格式維護,并提供接口文檔在線生成查看的功能。
4) 頁面設(shè)計器:提供開發(fā)人員可視化完成頁面設(shè)計,設(shè)計器可以通過配置方式進行頁面布局,拖拽方式進行控件添加,并提供即時預覽頁面的功能。
5) 執(zhí)行引擎:編譯頁面設(shè)計器設(shè)計頁面,生成可供直接修改使用的頁面元素文件。解析對象模型結(jié)構(gòu),構(gòu)建對象模塊服務(wù)與數(shù)據(jù)庫表。
可以看出,自定義組件庫為設(shè)計器和執(zhí)行引擎的運行提供了下層的支撐。對象模型設(shè)計器提供對象模型在線設(shè)計并最終生成對象模型,對象模型是后續(xù)接口設(shè)計、頁面設(shè)計的元數(shù)據(jù)。接口設(shè)計器基于對象模型通過可視化配置形式生成接口,接口是頁面和服務(wù)端進行通信的通道。頁面設(shè)計器基于之前設(shè)計的對象模型、接口進行頁面可視化設(shè)計,配置表單字段與對象模型的映射,表單事件與接口的映射,以此來達到頁面功能的實現(xiàn)。
開發(fā)人員通過設(shè)計頁面進行可視化對象模型設(shè)計,定義模型描述、模型字段、模型字段定義信息,生成模型元數(shù)據(jù),運行執(zhí)行引擎將模型元數(shù)據(jù)構(gòu)建為對象模型。執(zhí)行平臺自定義組件模型數(shù)據(jù)庫轉(zhuǎn)換器[4]將對象模型裝換為多數(shù)據(jù)庫識別的數(shù)據(jù)庫執(zhí)行語句,執(zhí)行代碼生成器組件可以依托對象模型生成對象服務(wù)代碼。對象模型設(shè)計器架構(gòu)如圖2所示。
1) 模型元數(shù)據(jù):模型設(shè)計信息的信息對象,按層級存放整個模型屬性信息。
2) 對象模型:業(yè)務(wù)對象的完整信息集合,是數(shù)據(jù)庫表和對象服務(wù)的生成基準,也是接口設(shè)計、頁面設(shè)計的基礎(chǔ)元素。
3) 模型數(shù)據(jù)庫轉(zhuǎn)換器:平臺自定義組件,封裝了模型數(shù)據(jù)庫轉(zhuǎn)換的處理邏輯,可以將對象模型轉(zhuǎn)換成數(shù)據(jù)庫執(zhí)行語句,支持包括Oracle、MySQL、達夢、MSSQL等14種數(shù)據(jù)庫。
4) 代碼生成器:平臺自定義組件,封裝了代碼生成邏輯,以對象模型為原型,生成對象基礎(chǔ)服務(wù)代碼。
對象模型設(shè)計器頁面如圖3所示。頂部是軟件選擇框、數(shù)據(jù)庫更新文件生成按鈕、服務(wù)端代碼生成按鈕。中間左側(cè)是對象模型設(shè)計定義,中間右側(cè)是對象模型屬性設(shè)計定義。開發(fā)者可以在線進行模型及模型屬性定義,模型設(shè)計完畢后,可以依托模型生成數(shù)據(jù)庫更新文件和服務(wù)端代碼。
開發(fā)人員通過設(shè)計頁面進行可視化接口設(shè)計,引入對象模型,定義接口信息,配置接口輸入輸出參數(shù),最終生成接口[5]。文檔生成器通過接口的定義及配置生成接口說明文檔[6]。接口設(shè)計器的設(shè)計架構(gòu)如圖4所示。
1) 對象服務(wù):基于對象模型生成的后端服務(wù),提供對象模型結(jié)構(gòu)數(shù)據(jù)查詢、保存、更新、刪除服務(wù)。
2) 文檔生成器:基于設(shè)計后接口定義及配置信息,文檔生成器可以生成接口說明文檔并提供在線接口文檔的查閱及接口測試。
接口設(shè)計器頁面如圖5所示。頂部是軟件選擇框、接口文檔生成按鈕。中間左側(cè)是接口設(shè)計定義,右側(cè)是接口輸入、輸出參數(shù)配置頁面。開發(fā)人員在線進行新建、選擇對象模型,配置輸入、輸出參數(shù)即可完成接口的開發(fā),依托生成的接口,可以生成接口文檔。
頁面設(shè)計器是頁面可視化設(shè)計工具,開發(fā)人員可以在線頁面布局[7],通過拖拽控件的方式就能滿足頁面設(shè)想,并可以即時預覽頁面,其整體架構(gòu)如圖6所示。
1) 視窗:設(shè)計頁面的容器[8],引入對象模型、接口,配置頁面屬性,定義頁面事件。
2) 頁面布局器:頁面設(shè)計的核心組件,通過拖拽式頁面布局、組件添加進行頁面設(shè)計[9],頁面設(shè)計后即可即時預覽,還提供通過在線編輯頁面代碼修改自定義樣式。
3) 前端自定義組件庫:前端自定義組件庫封裝了大量的前端頁面組件,除了常用的表格、表單、附件等組件,還提供統(tǒng)計圖表如餅圖、柱狀圖、儀表盤、樹圖等自定義封裝組件,做到拿來即用。
4) 代碼生成器:通過代碼生成器可以將在線設(shè)計的頁面生成可編輯的頁面代碼以及布局器頁面數(shù)據(jù)對象,開發(fā)者可以在線直接編譯生成的HTML、JS代碼來進行自定義的樣式調(diào)整以及邏輯開發(fā)。
頁面設(shè)計器界面如圖7所示,左側(cè)是組件選擇面板、布局對象結(jié)構(gòu)面板,中間是設(shè)計界面、預覽界面、HTML源碼面板、JS源碼面板,右側(cè)是屬性配置面板。開發(fā)者可以全程在線進行設(shè)計,還可以將設(shè)計界面源碼下載到本地開發(fā)環(huán)境中進行編譯開發(fā)。
執(zhí)行引擎一方面支撐各個設(shè)計器中配置工具的運行,另一方面要支撐設(shè)計模型的運行[10]。執(zhí)行引擎提供的主要功能如下:
1) 模型解析:軟件運行期間,當用戶發(fā)起頁面請求后,首先會將設(shè)計后的請求頁面解析成瀏覽器識別的HTML頁面,接著會將頁面調(diào)用的對象模型解析成對象服務(wù)識別的類對象。
2) 服務(wù)生成:在模型設(shè)計期,可以基于對象模型生成即時可用的在線對象模型服務(wù),可以提供在線訪問測試的功能。
3) 數(shù)據(jù)庫操作:基于設(shè)計期間生成的數(shù)據(jù)庫執(zhí)行語句,可以實現(xiàn)在線數(shù)據(jù)庫建庫、建表、更新表的操作。對象模型更新后會比對當前數(shù)據(jù)庫結(jié)構(gòu)生成差異執(zhí)行語句文件,通過執(zhí)行語句更新數(shù)據(jù)庫表結(jié)構(gòu),記錄執(zhí)行語句,并提供后期回溯、切換數(shù)據(jù)庫的功能。
目前,基于開發(fā)平臺開發(fā)的中船軍工建設(shè)項目管控系統(tǒng)、中船固定資產(chǎn)投資管理系統(tǒng)、中船產(chǎn)品質(zhì)量信息系統(tǒng)、某大型船廠智能管家系統(tǒng)等項目已上線運行,在開發(fā)平臺支撐下,軟件平均節(jié)省70%的開發(fā)工作量,節(jié)省約40%的人力成本,大幅提高了開發(fā)效率,有效降低了人力成本。
以軍工建設(shè)項目管控系統(tǒng)為例,全體共計97個菜單功能,其中21個菜單功能實現(xiàn)無代碼開發(fā),56個菜單功能代碼開發(fā)量在10%以內(nèi),13個菜單功能代碼開發(fā)量在20%以內(nèi),4個菜單功能代碼開發(fā)量在30%以內(nèi),僅3個菜單功能代碼開發(fā)量超過30%,整體節(jié)省約75%的開發(fā)工作量,其上線運行軟件頁面如圖8所示。
軟件可視化快速開發(fā)平臺是一種基于頁面可視化配置設(shè)計的引擎式開發(fā)平臺,該平臺在行業(yè)領(lǐng)域內(nèi)具有創(chuàng)新性。平臺通過封裝的組件調(diào)用、可視化的配置設(shè)計、引擎式的解析編譯,可以讓普通技術(shù)水平的開發(fā)人員經(jīng)過簡單的培訓后即可進行快速的軟件開發(fā),降低了開發(fā)成本,提高了開發(fā)效率。在下一步的工作中,一方面將繼續(xù)優(yōu)化模型構(gòu)造能力以及模型適用范圍,另一方面將通過梳理業(yè)務(wù)形成應(yīng)用領(lǐng)域內(nèi)可共享的業(yè)務(wù)模型庫,進一步提升平臺的可用性、豐富性。