[開源]可逆計(jì)算原理新一代低代碼平臺(tái),含工作流、報(bào)表、規(guī)則引擎
一、開源項(xiàng)目簡(jiǎn)介
Nop Platform 2.0是基于可逆計(jì)算原理從零開始構(gòu)建的新一代低代碼平臺(tái),它致力于克服低代碼平臺(tái)無法擺脫窮舉法的困境,從理論層面超越組件技術(shù),有效的解決粗粒度軟件復(fù)用的問題。
基于可逆計(jì)算原理從零開始構(gòu)建的低代碼平臺(tái),根據(jù)Excel數(shù)據(jù)模型自動(dòng)生成GraphQL服務(wù),內(nèi)置全新實(shí)現(xiàn)的工作流引擎、報(bào)表引擎、規(guī)則引擎、分布式事務(wù),定制化開發(fā)無需修改基礎(chǔ)產(chǎn)品源碼,支持GraalVM原生編譯,中小企業(yè)可以免費(fèi)商用。
二、開源協(xié)議
使用AGPL-3.0開源協(xié)議
Nop平臺(tái)的前端采用MIT協(xié)議,后端整體采用AGPL3.0開源協(xié)議。但是中小企業(yè)可以在類似Apache2.0協(xié)議的條件下使用本項(xiàng)目的代碼(可以免費(fèi)商用,修改代碼無需開源,但是要保留源碼中的原始版權(quán)信息)。為了方便第三方集成,nop-api-support/nop-commons/nop-core這三個(gè)包采用Apache 2.0協(xié)議。
- 判斷是否中小企業(yè)的算法如下:
switch(貴公司很有錢嗎()){ case "有的是錢":{ console.log("都這么有錢了,還需要整天琢磨別人的知識(shí)產(chǎn)權(quán)是否免費(fèi)嗎?"); return false; default: return true; }}
三、界面展示
界面框架
使用Excel來定義數(shù)據(jù)模型
使用Excel來定義對(duì)外發(fā)布的API模型
集成百度的前端低代碼框架AMIS
集成GraphQL調(diào)試工具
提供IDEA插件,支持自定義DSL的斷點(diǎn)調(diào)試
使用Excel作為報(bào)表設(shè)計(jì)器,支持復(fù)雜的中國(guó)式報(bào)表
使用Word模板來導(dǎo)出Word報(bào)表
使用Excel來設(shè)計(jì)決策表和決策矩陣
四、功能概述
Nop Platform 2.0是基于可逆計(jì)算原理從零開始構(gòu)建的新一代低代碼平臺(tái),它致力于克服低代碼平臺(tái)無法擺脫窮舉法的困境,從理論層面超越組件技術(shù),有效的解決粗粒度軟件復(fù)用的問題。
- nop-entropy是Nop平臺(tái)的后端部分。它采用java語言實(shí)現(xiàn),不依賴第三方框架,可以和Quarkus或者Spring框架集成在一起使用。
- nop-entropy支持GraalVM技術(shù),可以借助于Quarkus 或者SpringNative框架編譯為原生可執(zhí)行程序,運(yùn)行時(shí)不需要安裝JDK,且啟動(dòng)速度提升數(shù)十倍。
- nop-entropy的設(shè)計(jì)目標(biāo)是成為簡(jiǎn)單易用的領(lǐng)域語言工作臺(tái)(Domain Language Workbench)。通過增加簡(jiǎn)單的元數(shù)據(jù)定義,就可以自動(dòng)得到對(duì)應(yīng)的解析器、驗(yàn)證器、IDE插件、調(diào)試工具等,并自動(dòng)為DSL領(lǐng)域語言增加模塊分解、差量定制、元編程等通用語言特性。在這一點(diǎn)上,它類似于Jetbrains公司的MPS產(chǎn)品,只是它的設(shè)計(jì)原理和技術(shù)實(shí)現(xiàn)路徑與MPS有著本質(zhì)性差別。
- nop-entropy采用云原生設(shè)計(jì),內(nèi)置分布式事務(wù)和多租戶支持,可以單機(jī)運(yùn)行,也可以作為分布式集群運(yùn)行,可以提供在線的API服務(wù),也可以將針對(duì)單個(gè)業(yè)務(wù)對(duì)象的在線服務(wù)自動(dòng)包裝為針對(duì)批處理文件的批處理任務(wù)。對(duì)于大多數(shù)業(yè)務(wù)應(yīng)用場(chǎng)景均提供相應(yīng)的模型支持,只需少量配置即可完成主要功能,大大降低對(duì)手工編碼的需求。
- nop-entropy在開發(fā)期可以作為支持增量式開發(fā)的低代碼平臺(tái),自動(dòng)生成各類代碼以及相關(guān)文檔,在運(yùn)行期可以作為面向最終用戶的無代碼平臺(tái)的支撐技術(shù),允許客戶在線調(diào)整業(yè)務(wù)模塊功能,以所見即所得的方式進(jìn)行產(chǎn)品迭代。
目前開源的部分主要包含XLang語言的實(shí)現(xiàn),以及ORM、依賴注入容器(IoC)、分布式配置(Config)、GraphQLEngine、報(bào)表引擎(Report Engine)、任務(wù)調(diào)度引擎(Job Scheduler)、批處理引擎(batch Prcessing Engine)等基礎(chǔ)框架, 后續(xù)規(guī)劃包括規(guī)則引擎(Rule Engine)、工作流引擎(Workflow Engine)、商業(yè)智能(BI)等業(yè)務(wù)開發(fā)常用部分。
WARNING: Nop Platform 2.0的代碼是由Entropy Platform 1.0重構(gòu)而來,目前重構(gòu)工作沒有完全做完,且尚未在實(shí)際項(xiàng)目中使用過。
五、技術(shù)選型
軟件架構(gòu)
nop-entropy沒有使用Spring框架,所有模塊均從零開始采用模型驅(qū)動(dòng)的方式研發(fā)(框架本身的很多代碼也是根據(jù)模型生成并可以通過聲明式方式進(jìn)行定制調(diào)整的)。原則上說,nop-entropy可以運(yùn)行在任何支持REST服務(wù)標(biāo)準(zhǔn)的微服務(wù)框架之上。目前,我們主要是支持Quarkus框架以及Spring框架的集成。
Quarkus是Redhat公司所開源的新一代云原生微服務(wù)框架,它的開發(fā)體驗(yàn)以及針對(duì)GraalVM Native編譯的成熟程度都明顯優(yōu)于Spring框架。借助于Quarkus框架,我們既可以將應(yīng)用程序編譯為單一的uber jar(通過Java -jar指令來運(yùn)行),也可以將程序編譯為exe可執(zhí)行程序,在運(yùn)行時(shí)不需要安裝JDK,而且啟動(dòng)速度提升數(shù)十倍。目前,nop-entropy的開發(fā)調(diào)試主要是基于Quarkus框架進(jìn)行,所以對(duì)Spring框架的支持可能會(huì)存在一些小問題。
nop-entropy項(xiàng)目目前主要包含如下模塊:
- nop-api-support: API接口的支持類
- nop-commons: 常用的幫助類和幫助函數(shù)
- nop-core: 虛擬文件系統(tǒng),反射系統(tǒng),基本的樹、圖、表格模型,數(shù)據(jù)驅(qū)動(dòng)的代碼生成器框架,XML和JSON解析器
- nop-xlang: XPL模板語言,類TypeScript的腳本語言,類XPath的通用Tree路徑訪問語言, 類XSLT的通用Tree變換語言,XDefinition元模型定義語言,XDelta差量合并運(yùn)算。
- nop-config: 動(dòng)態(tài)配置管理
- nop-ioc: 支持條件裝配的依賴注入容器
- nop-dao: SQL管理、事務(wù)、JDBC訪問、數(shù)據(jù)庫方言
- nop-orm: 支持EQL對(duì)象查詢語言的ORM引擎
- nop-ooxml: Excel和Word模板文件的解析和生成
- nop-graphql: GraphQL解析器和執(zhí)行引擎
- nop-biz: 業(yè)務(wù)流引擎,與nop-graphql結(jié)合對(duì)外提供GraphQL和REST服務(wù)
- nop-ui: 視圖層模型
- nop-js: 對(duì)graalvm-js的封裝,用于在Java端執(zhí)行JS打包工作,擺脫對(duì)Vite/Webpack等前端打包工具的依賴
- nop-web: 動(dòng)態(tài)執(zhí)行Js打包工作,動(dòng)態(tài)生成前端所需的JSON頁面文件
- nop-rpc: 分布式RPC框架,支持灰度發(fā)布,集成Nacos、Sentinel
- nop-report: 采用Excel作為可視化設(shè)計(jì)器的中國(guó)式報(bào)表引擎
- nop-wf: 工作流引擎
- nop-rule: 采用Excel作為可視化設(shè)計(jì)器的規(guī)則引擎
- nop-batch: 批處理引擎
- nop-job: 分布式任務(wù)調(diào)度引擎
- nop-tcc: 分布式事務(wù)引擎
- nop-cluster: 分布式集群支持
- nop-auth: 用戶權(quán)限管理
- nop-sys: 系統(tǒng)配置管理
- nop-cli: 將代碼生成器封裝為命令行工具
- nop-autotest: 自動(dòng)化測(cè)試框架
- nop-demo: quarkus和spring框架的集成演示程序
- nop-idea-plugin: IDEA插件,支持對(duì)自定義DSL的語法提示、鏈接跳轉(zhuǎn)、斷點(diǎn)調(diào)試等
Nop平臺(tái)的前端代碼在nop-chaos項(xiàng)目中,nop-chaos的打包結(jié)果被包裝為以下Java模塊。
- nop-web-site: 前端主頁面框架的打包結(jié)果
- nop-web-amis-editor: 前端使用的AMIS可視化編輯器的打包結(jié)果 在一般的業(yè)務(wù)開發(fā)中我們只會(huì)編寫JSON和少量JS文件,不需要重新編譯nop-chaos項(xiàng)目。
安裝教程
環(huán)境準(zhǔn)備:JDK 11 、maven 3.6 、Git
訪問一飛開源:https://code.exmay.com/ 下載cd nop-entropymvn -T 2C clean install -DskipTests -Dquarkus.package.type=uber-jar
注意: 編譯運(yùn)行需要JDK11以上版本,不支持JDK8
quarkus.package.type參數(shù)是quarkus框架所識(shí)別的一個(gè)參數(shù),指定它為uber-jar將會(huì)把nop-quarkus-demo等項(xiàng)目打包成一個(gè)包含所有依賴類的單一jar包??梢酝ㄟ^java -jar XXX-runner.jar的方式直接運(yùn)行。
- nop-idea-plugin nop-idea-plugin是IDEA的插件項(xiàng)目,必須采用Gradle編譯。
cd nop-idea-plugingradlew buildPlugin
編譯出來的插件存放在build/distributions目錄下。參見插件的安裝和使用。
使用說明
- 平臺(tái)內(nèi)置了一個(gè)演示程序,使用H2內(nèi)存數(shù)據(jù)庫,可以直接啟動(dòng)運(yùn)行
cd nop-demo/nop-quarkus-demo/targetjava -Dquarkus.profile=dev -jar nop-quarkus-demo-2.0.0-SNAPSHOT-runner.jar
如果不指定profile=dev,則會(huì)以prod模式啟動(dòng)。prod模式下需要配置application.YAML中的數(shù)據(jù)庫連接,缺省使用本機(jī)的MySQL數(shù)據(jù)庫
- 訪問鏈接 http://localhost:8080, 用戶名:nop, 密碼:123
- 在IDEA中可以調(diào)試運(yùn)行nop-quarks-demo項(xiàng)目中的QuarksDemoMain類。quarkus框架在開發(fā)期提供了如下調(diào)試工具,
http://localhost:8080/q/dev http://localhost:8080/q/graphql-ui
在graphql-ui工具中可以查看所有后端服務(wù)函數(shù)的定義和參數(shù)。
- 完整的開發(fā)示例,參見tutorial
框架集成
nop-entropy不依賴于spring或者quarkus框架,也不依賴于特定數(shù)據(jù)庫,因此它很容易集成在第三方應(yīng)用中使用。
核心引擎的功能并不依賴于數(shù)據(jù)庫,可以以純內(nèi)存的方式運(yùn)行。所有存儲(chǔ)相關(guān)的代碼都已經(jīng)剝離到獨(dú)立的dao模塊中,例如nop-auth-dao,nop-sys-dao等。
- 作為增量式代碼生成工具使用:maven打包時(shí)可以讀取Excel模型文件,應(yīng)用指定的模板目錄,以增量化的方式生成代碼。參見codegen.md
- 為已有的XML/JSON/YAML格式的配置文件、領(lǐng)域模型文件提供可逆計(jì)算支持:為模型文件增加動(dòng)態(tài)分解、合并、產(chǎn)品化定制機(jī)制,對(duì)應(yīng)用層完全透明,對(duì)于引擎層只需要編寫一個(gè)自定義的模型文件加載器。參見delta-loader.md
- 為開發(fā)領(lǐng)域特定語言(DSL)提供支持:只需要定義xdef元模型文件即可獲得語法提示、鏈接跳轉(zhuǎn)、斷點(diǎn)調(diào)試等IDE支持。后續(xù)會(huì)提供可視化設(shè)計(jì)器定制支持。參見idea-plugin.md
- 作為模型驅(qū)動(dòng)的GraphQL引擎使用:根據(jù)Excel模型自動(dòng)生成GraphQL服務(wù),支持復(fù)雜主子表的增刪改查。參見graphql.md
- 作為報(bào)表引擎使用:只需要在Word或者Excel文件中增加少量標(biāo)注即可作為報(bào)表模板運(yùn)行,動(dòng)態(tài)生成復(fù)雜的中國(guó)式報(bào)表。參見report.md
- 作為工作流引擎使用:與定時(shí)調(diào)度引擎相結(jié)合,支持人工操作的審批工作流,也支持類似airflow的分布式DAG任務(wù)流。參見workflow.md
- 作為批處理引擎使用:類似SpringBatch XXLJob框架,提供分布式批處理任務(wù)支持。可以通過配置文件指定如何解析、生成文本或者二進(jìn)制數(shù)據(jù)文件,無需編寫解析和生成代碼。參見batch.md
- 作為規(guī)則引擎使用:通過配置實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)規(guī)則判斷。參見rule.md
- 作為數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)化測(cè)試框架使用:通過錄制、回放的機(jī)制實(shí)現(xiàn)自動(dòng)化測(cè)試。第一遍運(yùn)行的時(shí)候自動(dòng)錄制輸出數(shù)據(jù),此后運(yùn)行時(shí)自動(dòng)和錄制的數(shù)據(jù)快照進(jìn)行比較,減少手工需要編寫的代碼量。參見autotest.md
關(guān)注公眾號(hào),發(fā)送如下消息獲取下載鏈接:
"源代碼下載:None"