獨(dú)家干貨!兩種低代碼模型驅(qū)動(dòng)開發(fā)技術(shù)對(duì)比(低代碼 模型驅(qū)動(dòng))
本文概述
近兩年低代碼技術(shù)突然變得格外火熱,各種低代碼平臺(tái)紛紛粉墨登場。尤其是國內(nèi)互聯(lián)網(wǎng)大廠不斷推出云端低代碼開放平臺(tái),更是給低代碼技術(shù)添了一大把柴火。實(shí)際上低代碼技術(shù)不是近兩年才出現(xiàn)的新鮮事,早在上個(gè)世紀(jì)80年代起以CASE(計(jì)算機(jī)輔助軟件工程)技術(shù)為代表的低代碼技術(shù)就已經(jīng)出現(xiàn)了。其中典型的產(chǎn)品有:Oracle公司的CaseDesigner、GeneXus公司的GeneXus等。由于大量的戰(zhàn)團(tuán)加入了低代碼市場的競爭,典型的包括有基于OA、BPM、RAD、ERP、PAAS、APAAS、SAAS等不同的技術(shù)背景。不同的技術(shù)實(shí)現(xiàn)給企業(yè)用戶對(duì)低代碼平臺(tái)的選擇帶來了較大的困難,哪種平臺(tái)更適合自己呢?本文將通過對(duì)低代碼技術(shù)中的兩種核心關(guān)鍵技術(shù)的分析幫助企業(yè)用戶進(jìn)行選擇。我們知道大部分低代碼平臺(tái)都采用了模型驅(qū)動(dòng)的開發(fā)模式,即通過可視化建模的方式來實(shí)現(xiàn)軟件的設(shè)計(jì)和生成。領(lǐng)域模型創(chuàng)建完成后,有兩種技術(shù)路線來生成和運(yùn)行模型應(yīng)用:A,對(duì)生成的模型進(jìn)行編譯并生成所有相關(guān)的源代碼,使其成為普通的應(yīng)用系統(tǒng),該技術(shù)稱為“代碼生成”;B,利用模型解析執(zhí)行引擎直接解析并運(yùn)行所生成的模型,該技術(shù)稱為“模型解析”。以下將簡要介紹兩種技術(shù)的實(shí)現(xiàn)原理和特點(diǎn)。
代碼生成
低代碼開發(fā)平臺(tái)對(duì)于所創(chuàng)建的模型進(jìn)行分析并生成指定的目標(biāo)源代碼,可以是Java、.NET/core、JS、CSS、H5等。在生成源代碼時(shí),常見的方法是使用模板引擎技術(shù)。以Java代碼生成為例,一個(gè)模板會(huì)包含一系列相關(guān)的Java代碼段,同時(shí)包括了若干個(gè)空白標(biāo)識(shí),這些標(biāo)識(shí)將根據(jù)對(duì)應(yīng)模型的定義內(nèi)容來填充。經(jīng)過填充的模板將成為完整的Java類代碼。為了提升代碼執(zhí)行效率和代碼質(zhì)量,有些公司在生成代碼的過程中還引入了AI技術(shù)。例如:GeneXus公司一開始就利用了人工智能語言PROLOG來完成模型的分析與源代碼的生成工作,同時(shí)還在模型分析的過程中還對(duì)每個(gè)模型的優(yōu)化提供建議與指導(dǎo)(Navigation Report)。
模型解析執(zhí)行
采用模型解析技術(shù)時(shí),平臺(tái)并不會(huì)生成模型的目標(biāo)源代碼,而是通過平臺(tái)自帶的運(yùn)行時(shí)模型解析器(也稱執(zhí)行引擎)來直接運(yùn)行這些模型。這個(gè)執(zhí)行引擎就是一個(gè)由Java或者其它語言編寫智能執(zhí)行程序。一般執(zhí)行引擎會(huì)包含一個(gè)模型哈希鍵值映射表,引擎會(huì) 根據(jù)這個(gè)映射表找到并執(zhí)行指定的模型。模型解析技術(shù)被許多低代碼云平臺(tái)廠商所采用,例如:Mendix等。
代碼生成優(yōu)點(diǎn)分析
1.應(yīng)用可以脫離開發(fā)平臺(tái)任意部署
這可能是代碼生成最大的優(yōu)勢所在,因?yàn)閼?yīng)用生成后就與開放平臺(tái)無關(guān)了,應(yīng)用部署規(guī)模和數(shù)量都不會(huì)受平臺(tái)的限制,因此也不會(huì)為此繼續(xù)為平臺(tái)付費(fèi)。這種模式將軟件開發(fā)總擁有成本降到最低;
2.可以保護(hù)開發(fā)商的知識(shí)產(chǎn)權(quán)
可以為特定客戶進(jìn)行定制的開發(fā),開發(fā)商只需要將生成的源代碼(如果需要的話)及編譯后的安裝包提交給客戶即可,不需要提供開發(fā)環(huán)境及整合運(yùn)行環(huán)境。而模型解析則需要向客戶提供所有的后期運(yùn)行及運(yùn)維環(huán)境。
3.很好地融入客戶的IT架構(gòu)中
由于是生成傳統(tǒng)的軟件安裝包,因此可以很容易地在客戶已有的IT基礎(chǔ)架構(gòu)環(huán)境中進(jìn)行安裝部署,不需要對(duì)客戶的IT架構(gòu)提出新的要求,從而避免了在IT架構(gòu)方面的額外投入。有些代碼生成技術(shù)開發(fā)平臺(tái)(例如:GeneXus)還能夠生成不同運(yùn)行環(huán)境下的源代碼,例如:生成在Windows環(huán)境下的.NET語言、或者Linux環(huán)境下的Java語言等。而模型解析則需要安裝運(yùn)行平臺(tái)的架構(gòu)要求單獨(dú)部署新的運(yùn)行環(huán)境,或者租用平臺(tái)商指定的云平臺(tái)。
4.生成的代碼更容易理解
由于是生成了指定語言的源代碼,對(duì)該語言熟悉的技術(shù)人員可以很容易地讀懂和理解軟件的處理邏輯。而模型解析則由于其技術(shù)封閉性,客戶無法閱讀和了解軟件的處理邏輯和流程。當(dāng)軟件運(yùn)行出現(xiàn)問題時(shí)只能依賴平臺(tái)商的技術(shù)支持,而這種支持由于平臺(tái)商需要同時(shí)支持大量的客戶群,無法提供及時(shí)有效的支持。特別是由于軟件問題是由于平臺(tái)本身的問題所引起的時(shí),只能等到平臺(tái)升級(jí)后才能夠解決,這對(duì)于許多客戶來說是難以接受的。
5.對(duì)于需要提供源代碼的客戶更有吸引力
國內(nèi)許多客戶(尤其是大中型企業(yè))由于知識(shí)產(chǎn)權(quán)或知識(shí)保密等原因,往往需要開發(fā)商提供所開發(fā)軟件所有的源代碼進(jìn)行備案或由客戶自己的IT團(tuán)隊(duì)進(jìn)行后期的運(yùn)維和二次開發(fā)。針對(duì)這種客戶的需求只能選擇代碼生成模式。
6.更容易利用和整合已有的IT成果
代碼生成平臺(tái)由于其技術(shù)的開放性,可以很好地與目標(biāo)語言的各種已有的資源進(jìn)行集成。這樣前期已完成的軟件模塊(例如:jar包、DLLs、Java包、JS控件等)可以很容易地集成到開發(fā)平臺(tái),這就避免了重復(fù)開發(fā)工作。甚至隨著這些模塊的進(jìn)一步完善,可以作為平臺(tái)插件成為平臺(tái)的擴(kuò)展包。這種模式使得代碼生成技術(shù)開發(fā)平臺(tái)具有很好的擴(kuò)展性和兼容性。
7.提供額外的編譯檢查
代碼生成需要對(duì)生成的源代碼進(jìn)行編譯,而編譯器會(huì)對(duì)生成的代碼進(jìn)行語法檢查,針對(duì)編譯器檢查出來的錯(cuò)誤平臺(tái)會(huì)主動(dòng)處理以保證代碼質(zhì)量。有些代碼生成技術(shù)開發(fā)平臺(tái)還會(huì)提供不同層次的質(zhì)量檢查工具,例如:模型級(jí)檢查工具、源代碼級(jí)檢查工具、網(wǎng)絡(luò)運(yùn)行安全檢查工具等,甚至能夠集成流行的代碼檢查工具。而模型解析平臺(tái)則必須靠自己的技術(shù)來解決這個(gè)問題,同時(shí)開發(fā)環(huán)境與運(yùn)行環(huán)境必須緊耦合以消除開發(fā)環(huán)境與運(yùn)行環(huán)境的不同帶來的軟件運(yùn)行潛在問題。
8.提供Debug功能
許多代碼生成開放平臺(tái)能夠提供模型級(jí)的軟件測試跟蹤器(Debuger),這種Debug工具能夠幫助開發(fā)者調(diào)試模型定義和業(yè)務(wù)規(guī)則代碼的質(zhì)量。
模型解析優(yōu)點(diǎn)分析
1.一站式解決方案
采用模型解析技術(shù)的廠商傾向于將開發(fā)與運(yùn)行融為一體給客戶一個(gè)“一站式”IT解決方案,這一點(diǎn)對(duì)于中小企業(yè)客戶有很大的吸引力。但是“一站式”解決方案牽扯到技術(shù)與管理等方方面面,對(duì)于廠商的挑戰(zhàn)極大。另外,廠商也需要經(jīng)過較長時(shí)間的積累使得平臺(tái)更加成熟??蛻舨幌M约涸诘痛a平臺(tái)的投入由于廠商技術(shù)的限制或生存能力的限制打了水漂,“一站式”解決方案的技術(shù)封閉性使得客戶在平臺(tái)上開發(fā)的應(yīng)用無法移植到任何其它平臺(tái)上。
2.模型的調(diào)整更容易
模型的調(diào)整不需要重新顯式地進(jìn)行生成、編譯、重構(gòu)、測試、部署等步驟,這樣會(huì)大大降低周轉(zhuǎn)時(shí)間。
3.可以在運(yùn)行時(shí)對(duì)模型進(jìn)行實(shí)時(shí)調(diào)整
由于模型是運(yùn)行時(shí)可用,因此可以在不停止運(yùn)行應(yīng)用的情況下對(duì)模型進(jìn)行調(diào)整。
4.模型的兼容性更強(qiáng)
原則上解析器會(huì)開發(fā)一個(gè)能夠在不同平臺(tái)上獨(dú)立運(yùn)行的解析器,這樣只要有相同的解析器就能夠在該平臺(tái)上運(yùn)行模型。而代碼生成模式需要針對(duì)不同的平臺(tái)生成對(duì)于的語言代碼。
5.模型應(yīng)用發(fā)布簡單
在模型解析場景下,只要啟動(dòng)模型解析器并將開發(fā)的模型導(dǎo)入即可。這樣,領(lǐng)域?qū)<抑恍枰P(guān)注于模型建立,模型創(chuàng)建成功后,點(diǎn)擊“發(fā)布”按鈕即可實(shí)現(xiàn)應(yīng)用的發(fā)布。
6.升級(jí)便捷而且具有很好的系統(tǒng)可伸縮性
這個(gè)優(yōu)點(diǎn)主要是針對(duì)云平臺(tái)模式,因?yàn)樵破脚_(tái)本身具有非常好的系統(tǒng)可伸縮性。
7.系統(tǒng)更安全
由于模型解析平臺(tái)的相對(duì)封閉性,再加上云平臺(tái)運(yùn)行模式,普通人無法接觸到文件系統(tǒng)及模型定義文件。這樣就避免了模型被破壞的風(fēng)險(xiǎn)。
8.更靈活
解析器比代碼生成器更簡單也需要更少的代碼來實(shí)現(xiàn)相同的功能,因此也更容易進(jìn)行功能擴(kuò)展。
9.能夠?qū)崿F(xiàn)運(yùn)行時(shí)Debug
在應(yīng)用運(yùn)行時(shí)可以提供針對(duì)模型級(jí)的調(diào)試跟蹤。
結(jié)論
在對(duì)上述兩種低代碼技術(shù)進(jìn)行分析后,我們發(fā)現(xiàn)兩種技術(shù)各有春秋,換句話說“沒有最好的,只有最合適的”。那么,企業(yè)用戶如何選擇適合自己低代碼平臺(tái)呢?這可能取決于企業(yè)規(guī)模、企業(yè)管理水平、企業(yè)信息化建設(shè)階段、開發(fā)應(yīng)用業(yè)務(wù)領(lǐng)域、企業(yè)IT戰(zhàn)略及企業(yè)內(nèi)部IT團(tuán)隊(duì)的技術(shù)技能等要素。鑒于國內(nèi)低代碼平臺(tái)技術(shù)的成熟度與國外知名企業(yè)還有一定的差距,因此,建議企業(yè)在選擇低代碼平臺(tái)時(shí)要綜合考慮更多的要素并與自身特點(diǎn)、技術(shù)需求進(jìn)行匹配,這樣才能夠選出更適合自己的低代碼平臺(tái),畢竟這與企業(yè)購買一款應(yīng)用軟件完全不同。關(guān)于如何選擇低代碼平臺(tái)的建議,這里暫時(shí)賣個(gè)關(guān)子,我將會(huì)在另一篇文章中詳細(xì)介紹。