做低代碼引擎有多難?OneCode五個(gè)版本歷程心路歷程(低代碼開發(fā)平臺(tái) 知乎)
今天有幸跟處于頭部位置的幾家低代碼企業(yè)技術(shù)負(fù)責(zé)人在聊天,低代碼從最初的一個(gè)RAD(單頁模型)到大前端,工程化,再到企業(yè)中臺(tái)PAAS應(yīng)用。直到現(xiàn)在的云原生嵌入式引擎技術(shù),低代碼技術(shù)一直沖在技術(shù)潮流的第一浪頭。
回過頭來看OneCode的經(jīng)歷,五個(gè)版本的迭代。
一,V1.0 SPA單頁應(yīng)用
第一個(gè)表單SPA應(yīng)用
不管是現(xiàn)在大名鼎鼎的React還是國內(nèi)風(fēng)光一時(shí)的VUE,在1.0的哪個(gè)時(shí)代都在應(yīng)用同一個(gè)概念 “SPA單頁應(yīng)用程序”。
百度百科對(duì)SPA 是這樣定義的:
單頁Web應(yīng)用(single page web application,SPA),就是只有一張Web頁面的應(yīng)用。單頁應(yīng)用程序 (SPA) 是加載單個(gè)HTML 頁面并在用戶與應(yīng)用程序交互時(shí)動(dòng)態(tài)更新該頁面的Web應(yīng)用程序。
同時(shí)還有一個(gè)更為大家的熟知的概念 MVVM開發(fā)模式(前后端分離),即前后端各負(fù)其責(zé)。OneCode 1.0 也出生在這個(gè)年代,CodeBee團(tuán)隊(duì)在多年工作流表單設(shè)計(jì)器的經(jīng)驗(yàn)基礎(chǔ)上。廢棄了舊有的ext模板渲染模式,將組件進(jìn)行全新的SPA模式封裝。同時(shí)構(gòu)建了第一批OneCode 前后端一體的組件模型。在原有的技術(shù)體系框架中,逐步替換流程列表,表單應(yīng)用。
二,V2.0 低代碼引擎雛形,全站拖動(dòng)計(jì)劃
SPA的改造并不是一帆風(fēng)順的,在改造的過程中,團(tuán)隊(duì)無法適應(yīng)前后端分離開發(fā),前段組件構(gòu)建的時(shí)候靈活度太差無法適應(yīng)用戶需求等等問題,一次次讓產(chǎn)品的模型在新舊模型間不斷轉(zhuǎn)換,永遠(yuǎn)都存在無法消滅的最后一個(gè)“模板應(yīng)用”。但隨著團(tuán)隊(duì)的技術(shù)進(jìn)步,產(chǎn)品上線后SPA在應(yīng)用上帶來的新技術(shù)體驗(yàn),讓OneCode 1.0逐步的向主流的Vue ,React靠攏。團(tuán)隊(duì)的技術(shù)欲望也不再滿足于自定義表單,列表這樣單一的應(yīng)用。要支持全棧可定制,支持全棧可拖拽,D&D(技術(shù)小伙伴們應(yīng)該都能看懂)計(jì)劃啟動(dòng)乘風(fēng)而上。
至此,OneCode在2.0 中實(shí)現(xiàn)了第一個(gè)基于SPA的D&D,也有了D&D的夢(mèng)想
三,V3.0 Python,PHP哪個(gè)是最好學(xué)的語言? 都不是, 是D&D!
OneCode3.0 最是風(fēng)光,全站D&D,但飛的越高摔得越狠,去年5月份阿里團(tuán)隊(duì)發(fā)布了開源低代引擎“OneCodeEngine”,在開源的社區(qū)里討論最熱鬧的話題之一是如何構(gòu)建一個(gè)多頁的應(yīng)用。阿里官方的小伙伴甚至還專門為這一個(gè)話題發(fā)布了兩期視頻專題講解擴(kuò)展插件開發(fā)。
由一個(gè)單頁應(yīng)用擴(kuò)展到多頁應(yīng)用,表面上只是一個(gè)存儲(chǔ)文件的API操作。但實(shí)質(zhì)上卻是技術(shù)原理上本源上的跳躍,單頁應(yīng)用時(shí)所有應(yīng)用都在一個(gè)環(huán)境內(nèi),可以直接調(diào)用,而相關(guān)的可視化讀取也是靜態(tài)結(jié)構(gòu)。但如果是多頁應(yīng)用這就會(huì)面臨很多的問題,跨頁調(diào)用時(shí)可能新的頁面還沒有加載,更無從讀取其函數(shù)列表及對(duì)象結(jié)構(gòu),可視化就被無形中中斷。頁面加載上了還必須考慮到新的界面可能由不同的團(tuán)隊(duì)開發(fā)的,在結(jié)構(gòu)上甚至是全局變量命名空間上都會(huì)沖突。而將多頁擴(kuò)展到整個(gè)項(xiàng)目工程時(shí),多達(dá)幾百個(gè)頁面不同的層次的加載關(guān)系。就使得復(fù)雜度產(chǎn)生了數(shù)量級(jí)的跳躍。
3.0版本開啟多頁工程化應(yīng)用
OneCode2.0架構(gòu)出現(xiàn)了致命的缺陷, OneCode3.0臨危受命。工程結(jié)構(gòu)樹形結(jié)構(gòu)及系統(tǒng)開發(fā)需求,直接催生了后端的 OneCode-VFS共享存儲(chǔ)體系支撐。多頁面,多層級(jí)頁面迫使SPA采用了支持package結(jié)構(gòu)前端類結(jié)構(gòu)體,而頁應(yīng)用也必須支持獨(dú)立而嚴(yán)謹(jǐn)?shù)难b載機(jī)制。JavaScript單頁環(huán)境這個(gè)小魔鬼也被關(guān)在了單頁類結(jié)構(gòu)這個(gè)沙箱里,多個(gè)SPA終于可以相互照應(yīng)和平相處了。
四,V4.0 OneCode 超級(jí)大前端直面API
3.0是幸運(yùn)的,整個(gè)結(jié)構(gòu)性的創(chuàng)新和變革,使得那個(gè)“D&D”產(chǎn)品夢(mèng)想能夠繼續(xù),開始實(shí)戰(zhàn),一個(gè)D&D“超級(jí)前端”程序員,在項(xiàng)目產(chǎn)品經(jīng)理的領(lǐng)導(dǎo)下,快速而漂亮的完成了前端第一版原型,D&D在豐富組件庫的支持下,初步顯示了其快做,快改,快上的特點(diǎn)。但眼見為實(shí)還是無法避免,組件拖動(dòng)組合的硬傷,界面結(jié)構(gòu)復(fù)雜,數(shù)據(jù)應(yīng)用交互命名錯(cuò)亂,數(shù)據(jù)結(jié)構(gòu)臃腫缺少體系性結(jié)構(gòu)性的梳理,讓后期才逐步介入的后端團(tuán)隊(duì)差點(diǎn)陷入崩潰的邊緣。
前后端分離,先前端再后端的 view first (視圖優(yōu)先)模式,很快就破產(chǎn)。后端團(tuán)隊(duì)開始了全新的API設(shè)計(jì),在業(yè)務(wù)相對(duì)定型前端結(jié)構(gòu)初步完成時(shí),后端API設(shè)計(jì),其集約型嚴(yán)謹(jǐn)性得到了大幅的提升與之配套的文檔以及測(cè)試用例也是應(yīng)有盡有,后端團(tuán)隊(duì)出色的驗(yàn)證了code first(代碼優(yōu)先)所特有的模型建設(shè)優(yōu)勢(shì)。
皮球成功踢給了這個(gè)前端。前后端“顏色的戰(zhàn)爭(zhēng)”拉開了帷幕,接口參數(shù)命名規(guī)范,業(yè)務(wù)邏輯調(diào)轉(zhuǎn)調(diào)用順序改變、特有應(yīng)用前后交互… 在一次次的開會(huì)、文檔交互中將兩只大軍陷入了書山會(huì)海。
D&D 真的只是夢(mèng)想嗎?不! CodeBee團(tuán)隊(duì)在困難面前是從來都不會(huì)退縮,V4版本在多個(gè)項(xiàng)目產(chǎn)品的前后端分分合合中逐漸歸一。
后端為可視化應(yīng)用逐步增加了,接口參數(shù)說明、組件綁定描述、事件回調(diào)支持等多種可被圖形注解描述(可被前端直接圖形化的注解),這樣在前端可以在后端更新新接口信息,及參數(shù)時(shí)可以動(dòng)態(tài)通知用戶,并提供基礎(chǔ)的參數(shù)校驗(yàn)。前端也進(jìn)一步將組件化拆分為事件、動(dòng)作、組件、屬性等等,序列化后給后端應(yīng)用。方便后端應(yīng)用在權(quán)限攔截,頁面與編譯,公式執(zhí)行等多個(gè)方面充分發(fā)揮其優(yōu)勢(shì)。Module 模型應(yīng)用 DSM建模工具 也在產(chǎn)品經(jīng)理的極力推薦護(hù)航下啟程上馬。
DSM除了在前端實(shí)現(xiàn)了標(biāo)準(zhǔn)化組件定義外,還通過領(lǐng)域模型將二者打通。這樣在前端組件建模時(shí)便可以直接調(diào)用后端服務(wù)模型完成數(shù)據(jù)部分API構(gòu)建。而DSM模型工具也可以在后端建模時(shí)直接讀取前端組件屬性,打通前端動(dòng)作與后端服務(wù)的通訊能力。
DSM作為D&D新成員很快也得到了大家的認(rèn)同。
視圖設(shè)計(jì)器通過,后端模型綁定插件快速選定后端Agg聚合服務(wù)模型接口,配置頁面快速綁定前后臺(tái)交互
后端DSM建模通過視圖模型擴(kuò)展直接修改操作,前端組件模型
五, V5 OneCodeEngine 賦能低代碼
V5 版本,OneCode 進(jìn)入了一個(gè)全新的時(shí)代,長達(dá)將近2年的封閉研發(fā),徹底剝離清除項(xiàng)目痕跡,針對(duì)600余中前端組件進(jìn)行全面的標(biāo)準(zhǔn)化重構(gòu)。全面改寫OneCode 服務(wù)端,將OneCode注解體系直接擴(kuò)展擴(kuò)展至Dom原生支持。針對(duì)600余種組件常量常見動(dòng)作梳理出完整的枚舉結(jié)構(gòu)圖,在此基礎(chǔ)上與DSM模型進(jìn)行了深度整合。并確定其核心價(jià)值:
*OneCode是一款構(gòu)建在真實(shí)代碼之上的圖形化編程系統(tǒng)
*OneCode 是一款具有全站組件支持能力全面標(biāo)準(zhǔn)開放全棧低代碼應(yīng)用支撐系統(tǒng)
*OneCode 是一款以領(lǐng)域模型(DDD)為指導(dǎo),以Java為基礎(chǔ)語言的特定領(lǐng)域(DSM)模型構(gòu)建系統(tǒng)
OneCodeEngine 呼之而出!
全線的輔助驗(yàn)證管理工具也全線登場(chǎng)。
首先是,全系列管理端工具插件的V5重構(gòu)驗(yàn)證。工具類應(yīng)用本身就是非常復(fù)雜的界面組合,而將這些界面功能以高集約的方式展現(xiàn)在Web環(huán)境上時(shí)還有全面的保留其D&D的特性,在性能響應(yīng)上也要能夠滿足開發(fā)者高頻的使用。這對(duì)于底層引擎而言是非常嚴(yán)苛的考驗(yàn)。OneCode家族一個(gè)新的成員OneCodeStudio 來到大家的面前。OneCodeStudio本身也是一個(gè)低代碼工程,但這個(gè)工程將所有的管理端界面以及插件工具納入管理范圍,并且從底層解構(gòu),為插件及管理工具開發(fā)者提供了一套完整的仿真調(diào)試工具,方便對(duì)平臺(tái)的擴(kuò)展。 至此OneCode 本身完成了低碼應(yīng)用重構(gòu)。同時(shí)也很好的驗(yàn)證了,低碼本身在復(fù)雜應(yīng)用中的適應(yīng)性。
OneCode Studio工具集合
六, 開源工程支持范圍以及OneCode (JDSCloud 智能云)
自從阿里去年4月份開源其“LowCodeEngine” 低代碼引擎以來,CodeBee團(tuán)隊(duì)就在籌劃開源版本的建設(shè),在JDSCloud初步第一個(gè)版本初步測(cè)試完畢的空檔,決定在近期發(fā)布第一個(gè)OneCode開源版本。
OneCode 開源范圍及功能:
OneCode 第一個(gè)版本,以V5版本的引擎為核心,將平臺(tái)全部600余組件的2/3貢獻(xiàn)到社區(qū)版本,同時(shí)為方便大家構(gòu)建自身的工程體系,還會(huì)同步開源 OneCode V3版本的支持環(huán)境VFS(JAVA開發(fā))虛擬存儲(chǔ)系統(tǒng),以及配合V3 部署使用的 OneCode Server 和相關(guān)的部署管理插件。
V4及V5部分由于其技術(shù)成熟度以及商業(yè)層面的考慮暫時(shí)不能在當(dāng)前版本中發(fā)布,但為了方便大家自定義組件測(cè)試以及開發(fā)插件需求,我們將推出JDSCloud 的在線開發(fā)與編譯功能。大家可在線使用一碼通編輯器來編寫和測(cè)試插件程序,測(cè)試完畢編譯打包下載即可。
一碼通在線編輯器
七, 開源版本未來計(jì)劃
OneCode 從一開始就是站在巨人的肩膀上的。每一步的前行都離不開開源社區(qū)的滋養(yǎng),特別是來自于Java體系的開源小伙伴們,OneCode最終的歸宿也將是全部回饋社區(qū),這是CodeBee團(tuán)隊(duì)所有成員的最終愿景。
作為回饋社區(qū)的第一步,我們將盡心最大的努力積極參與社區(qū)的版本建設(shè),為社區(qū)提供持續(xù)并穩(wěn)定的技術(shù)支持。
作為低代碼開源社區(qū)的一員,OneCode 也將積極參與社區(qū)的標(biāo)準(zhǔn)化建設(shè)。在下一版本中,OneCode 會(huì)將最大程度兼容社區(qū)老大哥阿里“LowCodeEngin”,并適時(shí)優(yōu)先推出OneCode for 阿里“LowCodeEngin”,在組件及物料跨平臺(tái)通用方面邁出堅(jiān)實(shí)的一步。
2023年2月10日凌晨,首發(fā)于 文章JDS 頭條號(hào)。