Nop 平台 2.0
介绍
Nop 是非编程
Nop Platform 2.0是基于可逆计算原理从零开始构建的新一代低代码(lowcode)平台,它致力于克服低代码平台无法摆脱穷举法的困境,从理论层面超越组件技术,有效的解决粗粒度软件复用的问题。
-
nop-entropy是Nop平台的后端部分。它采用Java语言实现,不依赖第三方框架,可以和Quarkus、Spring或者Solon框架集成在一起使用。
-
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)、流处理引擎等业务开发常用部分。
Nop Platform 2.0的代码是由Entropy Platform 1.0重构而来 最近增加了对国产框架solon的集成,参见nop-solon,打包后的jar包大小相比与Spring和Quarkus要降低10多M。
开发进度:
模块 | 说明 | 进度 |
---|---|---|
nop-api-support | API接口的支持类 | 已完成 |
nop-codegen | 数据驱动的代码生成器 | 已完成 |
nop-antlr | Antlr的模型驱动改造 | 已完成 |
nop-core | 虚拟文件系统、反射机制、XML/JSON解析 | 已完成 |
nop-ioc | 声明式IoC容器 | 已完成 |
nop-config | 动态配置中心 | 已完成 |
nop-xlang | XLang脚本语言和模板语言 | 已完成 |
nop-dao | JDBC访问、事务、数据库方言 | 已完成 |
nop-orm | 下一代ORM引擎 | 已完成 |
nop-graphql | 下一代GraphQL引擎 | 已完成 |
nop-rpc | 分布式RPC调用 | 已完成 |
nop-ooxml | Office文件的解析和生成,取代POI。Word报表模板 | 已完成 |
nop-report | 中国式报表引擎 | 已完成 |
nop-rule | 规则引擎 | 已完成 |
nop-autotest | 模型驱动的自动化测试框架 | 已完成 |
nop-idea-plugin | IDEA开发插件,支持语法提示、文件跳转、断点调试 | 基本可用 |
nop-cli | 将代码生成器、文件监听等功能封装为命令行工具 | 基本可用 |
nop-cluster | 分布式集群支持 | 50% |
nop-tcc | 分布式事务 | 50% |
nop-dyn | 在线设计表单和数据模型、服务函数 | 基本可用 |
nop-workflow | 下一代工作流引擎 | 65% |
nop-task | 下一代逻辑流编排 | 50% |
nop-job | 分布式任务调度 | 40% |
nop-batch | 下一代批处理引擎 | 70% |
nop-message | Kafka/Pulsar消息队列封装 | 10% |
nop-dbtool | 数据库导入导出、数据结构比较、同步工具 | 30% |
nop-nosql | Redis封装 | 0% |
nop-stream | 简化的流处理,可以集成Flink | 0% |
nop-netty | TCP/IP服务处理框架 | 0% |
nop-datav | BI数据分析 | 0% |
nop-gpt | 与AI大模型集成,实现AIGC | 2% |
nop-js | GraalVM Js引擎封装,在Java中运行JS | 50% |
nop-integration | 邮件、短信、文件服务等外部服务封装 | 30% |
nop-auth | 用户权限管理 | 已完成 |
nop-sys | 系统配置管理 | 已完成 |
源码地址
- gitee: https://gitee.com/canonical-entropy/nop-entropy
- github: https://github.com/entropy-cloud/nop-entropy
设计原理
快速开始
软件架构
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平台的前端代码在nop-chaos项目中,nop-chaos的打包结果被包装为以下Java模块。
- nop-web-site: 前端主页面框架的打包结果
- nop-web-amis-editor: 前端使用的AMIS可视化编辑器的打包结果 在一般的业务开发中我们只会编写JSON和少量JS文件,不需要重新编译nop-chaos项目。
安装教程
环境准备: JDK 17+、Maven 3.9.3+、Git
git clone https://gitee.com/canonical-entropy/nop-entropy.git
cd nop-entropy
mvn clean install -DskipTests -Dquarkus.package.type=uber-jar
注意: 编译运行需要JDK17以上版本,不支持JDK8, 在PowerShell中执行的时候需要用引号将参数包裹起来
据反馈,有些JDK版本编译会报错,如jdk:17.0.9-graal会报错IndexOutOfBound异常,所以如果编译出现问题时可以先尝试一下OpenJDK。
mvn clean install "-DskipTests" "-Dquarkus.package.type=uber-jar"
quarkus.package.type参数是quarkus框架所识别的一个参数,指定它为uber-jar将会把nop-quarkus-demo等项目打包成一个包含所有依赖类的单一jar包。可以通过java -jar XXX-runner.jar的方式直接运行。
PowerShell乱码问题解决
可以将PowerShell的编码设置为UTF8
$OutputEncoding = [Console]::OutputEncoding = [Text.Encoding]::UTF8
目前已经升级到quarkus3.0版本,用低版本maven运行nop-auth-app等模块可能会失败。建议升级到maven 3.9.3版本,或者使用nop-entropy跟目录下的mvnw指令,它会自动下载并使用maven 3.9.3。
- nop-idea-plugin nop-idea-plugin是IDEA的插件项目,必须采用Gradle编译。
cd nop-idea-plugin
gradlew buildPlugin
目前使用的idea打包插件不支持高版本gradle。gradlew会自动下载所需的gradle版本,目前使用的是7.5.1 如果想加快gradle下载速度,可以gradle-wrapper.properties中换成 distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-7.5.1-bin.zip
编译出来的插件存放在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工具中可以查看所有后端服务函数的定义和参数。
- 完整的开发示例,参见教程
框架集成
nop-entropy不依赖于spring或者quarkus框架,也不依赖于特定数据库,因此它很容易集成在第三方应用中使用。
核心引擎的功能并不依赖于数据库,可以以纯内存的方式运行。所有存储相关的代码都已经剥离到独立的dao模块中,例如nop-auth-dao,nop-sys-dao等。
1.作为增量式代码生成工具使用:maven打包时可以读取Excel模型文件,应用指定的模板目录,以增量化的方式生成代码。参见codegen.md
2.为已有的XML/JSON/YAML格式的配置文件、领域模型文件提供可逆计算支持:为模型文件增加动态分解、合并、产品化定制机制,对应用层完全透明,对于引擎层只需要编写一个自定义的模型文件加载器。参见delta-loader.md
-
为开发领域特定语言(DSL)提供支持:只需要定义xdef元模型文件即可获得语法提示、链接跳转、断点调试等IDE支持。后续会提供可视化设计器定制支持。参见idea-plugin.md
-
作为模型驱动的GraphQL引擎使用:根据Excel模型自动生成GraphQL服务,支持复杂主子表的增删改查。参见graphql.md
-
Using as a report engine: You only need to add a few annotations to the Word or Excel file to run as a report template and dynamically generate complex Chinese-style reports. See report.md
-
Using as a workflow engine: Combined with the timing scheduling engine, it supports approval workflows with manual operations, and also supports distributed DAG task flows similar to airflow. See workflow.md
-
Using as a batch processing engine: Similar to the SpringBatch+XXLJob framework, it provides support for distributed batch processing tasks. You can specify how to parse and generate text or binary data files through configuration files without writing parsing and generation code. See batch.md
-
Using as a rule engine: Achieve complex business rule judgment through configuration. See rule.md
-
Using as a data-driven automated test framework: Realize automated testing through recording and playback mechanisms. The output data is automatically recorded during the first run, and then automatically compared with the recorded data snapshots during subsequent runs, reducing the amount of code that needs to be written manually. See autotest.md
Example Pages
-
Interface framework
-
Use Excel to define the data model
-
Use Excel to define the API model for external release
-
Integration of Baidu’s front-end low-code framework AMIS
-
Integration of GraphQL debugging tools
-
Provide IDEA plugin to support breakpoint debugging of custom DSL
-
Using Excel as a report designer to support complex Chinese-style reports
-
Use Word templates to export Word reports
-
Use Excel to design decision tables and decision matrices
Open Source Agreement
The front end of the Nop platform adopts the MIT protocol, and the overall back end adopts the AGPL3.0 open source protocol. However, small and medium-sized enterprises in China can use the code of this project under conditions similar to the Apache2.0 protocol (free commercial use, modification of the code does not require open source, but the original copyright information in the source code must be retained). For the convenience of third-party integration, the three packages nop-api-support/nop-commons/nop-core adopt the Apache 2.0 protocol.
- The algorithm to determine whether it is a small or medium-sized enterprise is as follows:
switch(Is your company very rich?()){
case "Yes, we have a lot of money":{
console.log("With so much money, do you still need to worry all day about whether other people's intellectual property is free?");
return false;
default:
return true;
}
}
Technical Support
If you encounter problems or bugs during use, you can raise issues on Gitee
Acknowledgements
- Thanks to netizen xyplayman for contributing ORM test cases, the original project address is https://gitee.com/xyplayman/nop-orm-demo
Community
- Official international website: https://nop-platform.github.io/
- Official Chinese website: https://nop-platform.gitee.io/
- Netizen Crazydan Studio established Nop Development Practice Sharing Website
Author's WeChat and WeChat Discussion Group
Please indicate when adding WeChat: join the Nop platform group