天天看點

[開源]可逆計算原理新一代低代碼平台,含工作流、報表、規則引擎

作者:一飛開源
一飛開源,介紹創意、新奇、有趣、實用的開源應用、系統、軟體、硬體及技術,一個探索、發現、分享、使用與互動交流的開源技術社群平台。緻力于打造活力開源社群,共建開源新生态!

一、開源項目簡介

Nop Platform 2.0是基于可逆計算原理從零開始建構的新一代低代碼平台,它緻力于克服低代碼平台無法擺脫窮舉法的困境,從理論層面超越元件技術,有效的解決粗粒度軟體複用的問題。

基于可逆計算原理從零開始建構的低代碼平台,根據Excel資料模型自動生成GraphQL服務,内置全新實作的工作流引擎、報表引擎、規則引擎、分布式事務,定制化開發無需修改基礎産品源碼,支援GraalVM原生編譯,中小企業可以免費商用。

二、開源協定

使用AGPL-3.0開源協定

Nop平台的前端采用MIT協定,後端整體采用AGPL3.0開源協定。但是中小企業可以在類似Apache2.0協定的條件下使用本項目的代碼(可以免費商用,修改代碼無需開源,但是要保留源碼中的原始版權資訊)。為了友善第三方內建,nop-api-support/nop-commons/nop-core這三個包采用Apache 2.0協定。

  • 判斷是否中小企業的算法如下:
switch(貴公司很有錢嗎()){
  case "有的是錢":{
    console.log("都這麼有錢了,還需要整天琢磨别人的知識産權是否免費嗎?");
    return false;
  default:
    return true;
  }
}           

三、界面展示

  1. 界面架構
[開源]可逆計算原理新一代低代碼平台,含工作流、報表、規則引擎
  1. 使用Excel來定義資料模型
[開源]可逆計算原理新一代低代碼平台,含工作流、報表、規則引擎
  1. 使用Excel來定義對外釋出的API模型
[開源]可逆計算原理新一代低代碼平台,含工作流、報表、規則引擎
  1. 內建百度的前端低代碼架構AMIS
[開源]可逆計算原理新一代低代碼平台,含工作流、報表、規則引擎
  1. 內建GraphQL調試工具
[開源]可逆計算原理新一代低代碼平台,含工作流、報表、規則引擎
  1. 提供IDEA插件,支援自定義DSL的斷點調試
[開源]可逆計算原理新一代低代碼平台,含工作流、報表、規則引擎
  1. 使用Excel作為報表設計器,支援複雜的中國式報表
[開源]可逆計算原理新一代低代碼平台,含工作流、報表、規則引擎
[開源]可逆計算原理新一代低代碼平台,含工作流、報表、規則引擎
  1. 使用Word模闆來導出Word報表
[開源]可逆計算原理新一代低代碼平台,含工作流、報表、規則引擎
  1. 使用Excel來設計決策表和決策矩陣
[開源]可逆計算原理新一代低代碼平台,含工作流、報表、規則引擎
[開源]可逆計算原理新一代低代碼平台,含工作流、報表、規則引擎

四、功能概述

Nop Platform 2.0是基于可逆計算原理從零開始建構的新一代低代碼平台,它緻力于克服低代碼平台無法擺脫窮舉法的困境,從理論層面超越元件技術,有效的解決粗粒度軟體複用的問題。

  • nop-entropy是Nop平台的後端部分。它采用Java語言實作,不依賴第三方架構,可以和Quarkus或者Spring架構內建在一起使用。
  • nop-entropy支援GraalVM技術,可以借助于Quarkus 或者SpringNative架構編譯為原生可執行程式,運作時不需要安裝JDK,且啟動速度提升數十倍。
  • nop-entropy的設計目标是成為簡單易用的領域語言工作台(Domain Language Workbench)。通過增加簡單的中繼資料定義,就可以自動得到對應的解析器、驗證器、IDE插件、調試工具等,并自動為DSL領域語言增加子產品分解、差量定制、元程式設計等通用語言特性。在這一點上,它類似于Jetbrains公司的MPS産品,隻是它的設計原理和技術實作路徑與MPS有着本質性差别。
  • nop-entropy采用雲原生設計,内置分布式事務和多租戶支援,可以單機運作,也可以作為分布式叢集運作,可以提供線上的API服務,也可以将針對單個業務對象的線上服務自動包裝為針對批處理檔案的批處理任務。對于大多數業務應用場景均提供相應的模型支援,隻需少量配置即可完成主要功能,大大降低對手工編碼的需求。
  • nop-entropy在開發期可以作為支援增量式開發的低代碼平台,自動生成各類代碼以及相關文檔,在運作期可以作為面向最終使用者的無代碼平台的支撐技術,允許客戶線上調整業務子產品功能,以所見即所得的方式進行産品疊代。

目前開源的部分主要包含XLang語言的實作,以及ORM、依賴注入容器(IoC)、分布式配置(Config)、GraphQLEngine、報表引擎(Report Engine)、任務排程引擎(Job Scheduler)、批處理引擎(Batch Prcessing Engine)等基礎架構, 後續規劃包括規則引擎(Rule Engine)、工作流引擎(Workflow Engine)、商業智能(BI)等業務開發常用部分。

WARNING: Nop Platform 2.0的代碼是由Entropy Platform 1.0重構而來,目前重構工作沒有完全做完,且尚未在實際項目中使用過。

五、技術選型

軟體架構

nop-entropy沒有使用Spring架構,所有子產品均從零開始采用模型驅動的方式研發(架構本身的很多代碼也是根據模型生成并可以通過聲明式方式進行定制調整的)。原則上說,nop-entropy可以運作在任何支援REST服務标準的微服務架構之上。目前,我們主要是支援Quarkus架構以及Spring架構的內建。

Quarkus是Redhat公司所開源的新一代雲原生微服務架構,它的開發體驗以及針對GraalVM Native編譯的成熟程度都明顯優于Spring架構。借助于Quarkus架構,我們既可以将應用程式編譯為單一的uber jar(通過java -jar指令來運作),也可以将程式編譯為exe可執行程式,在運作時不需要安裝JDK,而且啟動速度提升數十倍。目前,nop-entropy的開發調試主要是基于Quarkus架構進行,是以對Spring架構的支援可能會存在一些小問題。

nop-entropy項目目前主要包含如下子產品:

  1. nop-api-support: API接口的支援類
  2. nop-commons: 常用的幫助類和幫助函數
  3. nop-core: 虛拟檔案系統,反射系統,基本的樹、圖、表格模型,資料驅動的代碼生成器架構,XML和JSON解析器
  4. nop-xlang: XPL模闆語言,類TypeScript的腳本語言,類XPath的通用Tree路徑通路語言, 類XSLT的通用Tree變換語言,XDefinition元模型定義語言,XDelta差量合并運算。
  5. nop-config: 動态配置管理
  6. nop-ioc: 支援條件裝配的依賴注入容器
  7. nop-dao: SQL管理、事務、JDBC通路、資料庫方言
  8. nop-orm: 支援EQL對象查詢語言的ORM引擎
  9. nop-ooxml: Excel和Word模闆檔案的解析和生成
  10. nop-graphql: GraphQL解析器和執行引擎
  11. nop-biz: 業務流引擎,與nop-graphql結合對外提供GraphQL和REST服務
  12. nop-ui: 視圖層模型
  13. nop-js: 對graalvm-js的封裝,用于在Java端執行JS打包工作,擺脫對Vite/Webpack等前端打包工具的依賴
  14. nop-web: 動态執行Js打包工作,動态生成前端所需的JSON頁面檔案
  15. nop-rpc: 分布式RPC架構,支援灰階釋出,內建Nacos、Sentinel
  16. nop-report: 采用Excel作為可視化設計器的中國式報表引擎
  17. nop-wf: 工作流引擎
  18. nop-rule: 采用Excel作為可視化設計器的規則引擎
  19. nop-batch: 批處理引擎
  20. nop-job: 分布式任務排程引擎
  21. nop-tcc: 分布式事務引擎
  22. nop-cluster: 分布式叢集支援
  23. nop-auth: 使用者權限管理
  24. nop-sys: 系統配置管理
  25. nop-cli: 将代碼生成器封裝為指令行工具
  26. nop-autotest: 自動化測試架構
  27. nop-demo: quarkus和spring架構的內建示範程式
  28. nop-idea-plugin: IDEA插件,支援對自定義DSL的文法提示、連結跳轉、斷點調試等

Nop平台的前端代碼在nop-chaos項目中,nop-chaos的打包結果被包裝為以下Java子產品。

  1. nop-web-site: 前端首頁面架構的打包結果
  2. nop-web-amis-editor: 前端使用的AMIS可視化編輯器的打包結果 在一般的業務開發中我們隻會編寫JSON和少量JS檔案,不需要重新編譯nop-chaos項目。

安裝教程

環境準備: JDK 11+、Maven 3.6+、Git

git clone https://gitee.com/canonical-entropy/nop-entropy.git
cd nop-entropy
mvn -T 2C clean install -DskipTests -Dquarkus.package.type=uber-jar           

注意: 編譯運作需要JDK11以上版本,不支援JDK8

quarkus.package.type參數是quarkus架構所識别的一個參數,指定它為uber-jar将會把nop-quarkus-demo等項目打包成一個包含所有依賴類的單一jar包。可以通過java -jar XXX-runner.jar的方式直接運作。

  • nop-idea-plugin nop-idea-plugin是IDEA的插件項目,必須采用Gradle編譯。
cd nop-idea-plugin
gradlew buildPlugin
           

編譯出來的插件存放在build/distributions目錄下。參見插件的安裝和使用。

使用說明

  • 平台内置了一個示範程式,使用H2記憶體資料庫,可以直接啟動運作
cd nop-demo/nop-quarkus-demo/target
java -Dquarkus.profile=dev -jar nop-quarkus-demo-2.0.0-SNAPSHOT-runner.jar           
如果不指定profile=dev,則會以prod模式啟動。prod模式下需要配置application.yaml中的資料庫連接配接,預設使用本機的MySQL資料庫
  • 通路連結 http://localhost:8080, 使用者名:nop, 密碼:123
  • 在IDEA中可以調試運作nop-quarks-demo項目中的QuarksDemoMain類。 quarkus架構在開發期提供了如下調試工具,
http://localhost:8080/q/dev http://localhost:8080/q/graphql-ui

在graphql-ui工具中可以檢視所有後端服務函數的定義和參數。

  • 完整的開發示例,參見tutorial

架構內建

nop-entropy不依賴于spring或者quarkus架構,也不依賴于特定資料庫,是以它很容易內建在第三方應用中使用。

核心引擎的功能并不依賴于資料庫,可以以純記憶體的方式運作。所有存儲相關的代碼都已經剝離到獨立的dao子產品中,例如nop-auth-dao,nop-sys-dao等。
  1. 作為增量式代碼生成工具使用:maven打包時可以讀取Excel模型檔案,應用指定的模闆目錄,以增量化的方式生成代碼。參見codegen.md
  2. 為已有的XML/JSON/YAML格式的配置檔案、領域模型檔案提供可逆計算支援:為模型檔案增加動态分解、合并、産品化定制機制,對應用層完全透明,對于引擎層隻需要編寫一個自定義的模型檔案加載器。參見delta-loader.md
  3. 為開發領域特定語言(DSL)提供支援:隻需要定義xdef元模型檔案即可獲得文法提示、連結跳轉、斷點調試等IDE支援。後續會提供可視化設計器定制支援。參見idea-plugin.md
  4. 作為模型驅動的GraphQL引擎使用:根據Excel模型自動生成GraphQL服務,支援複雜主子表的增删改查。參見graphql.md
  5. 作為報表引擎使用:隻需要在Word或者Excel檔案中增加少量标注即可作為報表模闆運作,動态生成複雜的中國式報表。參見report.md
  6. 作為工作流引擎使用:與定時排程引擎相結合,支援人工操作的審批工作流,也支援類似airflow的分布式DAG任務流。參見workflow.md
  7. 作為批處理引擎使用:類似SpringBatch+XXLJob架構,提供分布式批處理任務支援。可以通過配置檔案指定如何解析、生成文本或者二進制資料檔案,無需編寫解析和生成代碼。參見batch.md
  8. 作為規則引擎使用:通過配置實作複雜的業務規則判斷。參見rule.md
  9. 作為資料驅動的自動化測試架構使用:通過錄制、回放的機制實作自動化測試。第一遍運作的時候自動錄制輸出資料,此後運作時自動和錄制的資料快照進行比較,減少手工需要編寫的代碼量。參見autotest.md

六、源碼位址

通路一飛開源:https://code.exmay.com/

繼續閱讀