- 博客(73)
- 收藏
- 关注

原创 可逆计算:下一代软件构造理论
图灵机理论和Lambda演算理论是计算机领域的两个基本理论,如果补充可逆差量这一概念,可以很自然的推导出一个新的可以实现图灵完备的软件构造理论:可逆计算。Docker和React等基于差量概念的创新技术都可以看作是可逆计算理论的一种具体实例。
2023-05-12 11:31:59
538
1
原创 预告:为什么SpringBatch是一个糟糕的设计
https://gitee.com/canonical-entropy/nop-entropy/blob/master/docs/theory/why-springbatch-is-bad.md 这是我周六要讲解的内容。其实简单的DSL设计只是Nop平台的第一步,多个DSL如何无缝嵌套在一起,如何基于已有的DSL用最小的成本定制出最符合自己需求的DSL,这才是Nop平台的关键。会议链接: https://meeting.tencent.com/dm/lCnBzsYs61MR。会议时间: 周六 21:00。
2024-12-13 06:42:21
237
原创 通用的Delta差量化机制
仔细思考一下就知道,一般人眼中所谓的动态更新无非就是在已经构造好的结构上定义扩展点,然后将符合接口规范的结构插入到扩展点中。实现动态的差量化更新的复杂性体现在如下三点:如何设计扩展点才能保证满足未知的差量更新需求?如何实现外部引入的差量结构与原有的结构无缝融合?如何保证差量化更新前后运行时状态的一致性?除了以上三点,我们还可以问自己一个问题:既然所有的业务逻辑结构都存在潜在的动态更新需求,
2024-11-14 20:38:28
843
原创 Nop平台的定位及发展规划
Nop平台是基于可逆计算理论从零开始构建的,支持面向语言编程范式的新一代低代码平台,它在基本的软件构造原理层面突破了传统的面向对象和组件理论的限制,可以实现系统级别的粗粒度的软件复用。Nop平台于2023年3月开源,至今已经有近一年左右的时间,逐渐的开始有一些同学将它用在自己的项目中,或者基于它的基本理念重构自己的低代码技术产品。在这种情况下,有些人可能比较关心Nop平台未来的发展规划是什么,它作为开源项目的可持续性怎么样?在本文中,我将针对一些常见的问题做一个解答。
2024-11-14 20:35:31
1110
原创 NopReport中如何通过可扩展性设计实现二维码导出
NopReport引擎与一般的报表引擎非常不一样的地方是,它非常强调报表模型的自包含性和自定义抽象的能力。在报表模型的【展开前】配置中,我们可以定义仅在这个报表中使用的函数。这个函数定义存放在报表模型中,而不需要外部注册或者传入。在【展开前】配置中,我们可以利用XPL模板语言的标签库抽象,来动态加载外部标签函数。后续Nop平台将会为所有XPL配置段提供通用的逻辑编排可视化设计器,这样就可以使用可视化配置的方式为报表模型引入自定义函数。
2024-11-13 20:03:52
974
原创 如何用润乾发明的DQL查询语法来简化多表关联查询
DQL(Dimentinal Query Language)语言是润乾公司提出的一种面向OLAP的多维数据查询语言,可以将复杂的主子表很简单的整合为一个大宽表来查询。具体介绍可以参考乾学院的文章详细语法分析参见在Nop平台中,NopORM也提供了类似的查询方式,可以通过QueryBean来查询多个表的数据,而不需要关心表之间的关联关系。
2024-11-13 20:02:01
677
原创 如何将Nop平台与Solon框架集成
Solon是一个基于Java的国产轻量级微服务框架,详细介绍参见官网。Solon的启动速度很快,占用内存很小,可以作为SpringBoot的一个替代品。Nop平台是基于可逆计算原理从零开始研发的下一代低代码平台,它的核心是采用面向语言编程范式,为领域特定语言(DSL)的设计和应用提供基础架构支撑。Nop平台是一个上层技术架构平台,它可以运行在多种底层技术框架之上,此前已经适配了Quarkus和Spring框架,在本文中我将介绍将Nop平台与Solon框架集成的具体方法。
2024-11-12 20:42:56
1109
原创 GraphQL为什么流行不起来?是设计不足还是设计过度?
GraphQL的原始形式比较复杂,相比于REST调用有优点也有缺点,这使得它的流行存在一定的阻力。NopGraphQL在数学层面上统一了GraphQL和REST的内在结构,通过一系列的扩展提升了GraphQL的易用性。NopGraphQL引擎的实现代码远比SpringMVC要简单,它为REST服务增加了类似GraphQL的字段选择能力,实现了GraphQL和REST的等价变换。
2024-11-12 20:41:23
1055
原创 地表最强的模型驱动代码生成器NopCodeGen
无需编程,只需要增加一个imp导入模型定义,即可自动实现Excel文件的解析。在本示例中,我们建立一个app-templates模块,然后在其中加入msg.imp.xml导入模型定义文件。为了让Nop平台的模型加载器识别msg.xlsx这样的文件后缀名,实现对模型的自动加载和解析,我们需要定义增加一个注册模型,即上面的msg.register-model.xml。
2024-11-11 10:03:26
1444
原创 再谈百度AMIS框架和声明式编程
从声明式编程的角度上说,AMIS框架引入Api对象完全是非常合理和自然的一种选择。gitee:github:可逆计算原理和Nop平台介绍及答疑_哔哩哔哩_bilibili。
2024-11-11 09:58:10
1217
原创 为什么在数学的意义上GraphQL严格的优于REST?
GraphQL是Facebook公司所提出的一种用于API的查询语言,很多人把它看作是REST的替代品,但也有很多人认为GraphQL比REST复杂得多,且没有明显收益。GraphQL到底具有哪些独特的能力超越了REST的能力范围?有没有一种客观的、严谨的评判标准可以帮助我们做出判断?Nop平台中通过严密的数学推理,对于GraphQL的定位进行了重新的诠释,获得了一些新的设计思想和技术实现方案。在这种诠释下,NopGraphQL引擎实现了对REST的全面超越,
2024-11-08 12:00:02
1011
原创 Nop如何克服DSL只能应用于特定领域的限制
在这种情况下,所有的引擎都只需要处理自己特有的运行时逻辑即可,而且因为大量的可扩展设计都可以在编译期借助于Nop平台来完成,所以引擎的运行时结构可以得到极大的简化。在Nop平台中,每个引擎的代码量一般会比对应的开源实现要小一个数量级,同时还提供更丰富的功能、更好的可扩展性、更优异的性能。参见。
2024-11-07 20:21:01
1383
原创 那些在Nop代码生成器中用到的DSL
举例来说,ExcelWorkbook是对表格数据模型的建模结果,它和Excel并不是绑定关系。Excel仅仅是ExcelWorkbook的一种序列化形式,它还可以序列化为一个更加简单的xpt.xml模型文件。
2024-11-07 20:19:25
923
原创 从可逆计算看后端服务函数的可扩展设计
很多低代码平台的核心其实就是一个CRUD模型,一般通过内置的扩展点(比如插入前、插入后等)来提供一定的可定制性。Nop平台中CRUD模型没有任何的特殊性,它内置的CrudBizModel仅仅是一个普通的BizModel模型,在Nop平台核心中并没有任何针对CRUD扩展点的特殊处理。在本文中,我将以CrudBizModel为例,讲解一下Nop平台中实现后台服务时的常见扩展方案。
2024-11-06 07:31:47
896
原创 Nop入门:扩展已有服务
在开发一个产品化的业务系统时,经常会出现需要扩展基础产品中的已有服务的情况。比如说,扩展系统内置的Login服务,为LoginRequest增加更多的请求参数,或者扩展返回的LoginResult对象,增加更多的返回信息。作为一个产品化的系统,我们肯定不希望修改已有的代码,但是目前流行的开源框架如Spring、Quarkus等并没有内置的扩展机制可以在不修改原有服务函数代码的情况下改变已有服务的接口,因此在支持复杂业务产品的二次开发时困难重重。
2024-11-06 07:29:42
785
原创 Nop入门: 如何创造性的扩展GraphQL
GraphQL要求在前端调用时指定返回的字段,对于字段比较多的情况会显得比较繁琐。此时我们可以利用GraphQL语言的Fragment功能来定义一些常用的字段集合,然后在查询时引用这些Fragment,从而简化查询。F_
2024-11-05 19:33:46
994
原创 Nop入门:极简AOP实现
AOP(Aspect Oriented Programming)本质上是一个非常简单的概念(定位+局部逻辑修改),但是它的实现却往往并不简单。作为Spring框架的一个核心功能,SpringAOP中引入的异常复杂的切点定义语法。但是在实际使用场景中,唯一得到广泛应用的切点(Pointcut)定义方法就是使用注解(Annotation)。另外一方面,SpringAOP会使用动态代码生成或者动态代理类,这会影响到应用的启动速度或者运行时性能,对于GraalVM原生编译也不友好。
2024-11-05 19:32:16
1024
原创 Nop入门: 动态SQL管理
Nop平台提供了类似MyBatis的动态SQL管理能力,但是功能特性远比MyBatis丰富、强大。同时它的实现反而更加简单,在NopORM的基础上实现SqlLibManager只需要300多行的代码。
2024-11-04 11:34:53
912
原创 Nop入门:如何实现复杂查询
在这三个部分中,我们都可以插入过滤条件和排序条件例如调用链接可以映射到业务对象NopAuthSite对象的findList方法,然后选择性的返回指定的结果字段。
2024-11-04 11:32:54
1088
原创 Nop入门:极简数据访问层实现
Nop平台的数据访问层使用NopORM引擎,它的功能相当于JPA + MyBatis + SpringData,并且内置了多租户、逻辑删除、动态扩展字段、字段加密等业务常用功能。NopGraphQL服务框架会自动自动识别ORM的实体对象,自动使用ORM引擎去实现实体关联属性的批量加载。Nop平台的标准开发模式是先设计数据模型,然后再根据数据模型生成Java实体代码,但是这只是简化开发的一种方式。NopORM支持动态数据模型,我们可以跳过代码生成的步骤直接手工编写数据模型文件,从而实现数据库访问层。
2024-11-02 20:37:36
934
原创 Nop入门:极简服务层实现
设置了nop.debug=true的时候,Nop平台会以调试模式启动。gitee:github:可逆计算原理和Nop平台介绍及答疑_哔哩哔哩_bilibili。
2024-11-02 20:35:19
1295
原创 从可逆计算看DSL的设计要点
DSL的价值在于它所抽象出来的具有业务价值的领域语义空间,至于它采用什么样的语法形式本质上是一个次要问题。XDSL统一采用XML语法形式,这样就可以引入统一的XDefinition元模型语言来规范具体的DSL语法。元模型是描述模型的模型。类似于元数据是描述数据的数据。
2024-11-01 20:30:52
995
原创 Dubbo的设计存在哪些问题?3000行代码的分布式RPC能做什么?
NopRPC是从第一性原理出发,重新审视RPC的概念,完全重新设计的Yet Another PRC框架,它的设计非常简洁直观,易于扩展,是Nop平台的一个有机组成部分。gitee:github:可逆计算原理和Nop平台介绍及答疑_哔哩哔哩_bilibili。
2024-11-01 20:27:37
788
原创 关于Nop平台底层理论的答疑
并不是这样。在Nop平台中Excel并不是直接起作用的,它等价于app.orm.xml。Excel仅仅是orm.xml的一个展现形式而已,相当于是一个展示缓存。Nop平台中真正使用的是app.orm.xml,没有Excel也完全可以运行,只不过从Excel来生成app.orm.xml便于保持代码和需求文档的一致性。使用代码驱动的方式,或者使用yaml文件定义,这种方式都不便于非技术的需求人员参与,也不便于和客户沟通。如果单独维护文档,则很容易出现文档和代码的不一致性。
2024-10-31 20:41:47
697
原创 Nop平台核心代码阅读导引
Nop平台核心引擎的实现代码都很简短,一般模块的核心代码量都是5000行左右的量级,只有ORM比较复杂一些,1万多行。虽然代码很短,实际实现的功能特性却很多,要把所有细节设计都介绍到,文档量还是不小。建议有问题可以先查看源码,核心特性都有单元测试支持,可以通过调试单元测试来学习源码(直接在关键类中加断点,然后沿着堆栈向上看)。Nop平台所有的设计都非常简单直接,一般核心代码集中在少数几个类中。
2024-10-30 09:19:57
1289
原创 Nop平台中的模块依赖关系
Nop平台的模块虽然很多,但是因为整体设计采用了依赖注入、动态加载等方式,各个模块的耦合度很低,大部分模块都可以独立使用,并且可以脱离Nop平台与其他框架集成使用。
2024-10-30 09:13:39
1060
原创 Nop平台与APIJSON的功能对比
Nop平台内置的CrudBizModel提供了findPage和findList等多种集合查询函数。其中findPage返回PageBean对象,它提供了total, page, cursor等多种返回结果值。long total;int limit;它支持这种按位置下标分页,也支持这种按值排序分页。对于子表集合,支持类似React Relay框架的Connection分页机制,也支持QueryBean这种分页机制。
2024-10-29 20:40:58
1469
原创 Nop平台与SpringCloud的功能对比
Nop平台的实现与SpringCloud相比,主要有如下特点:实现原理简单直接,代码量普遍比Spring框架中的组件小一个数量级以上,但是核心功能反而更加丰富支持差量化定制,可以在Delta目录下增加Delta模型文件来定制所有已有功能(包括平台内置功能),例如所有的数据模型、所有的设计器页面都可以自由定制。利用代码生成、元编程等机制实现自动推导,极大降低需要手工编写的代码量,保证系统内部信息结构的高度一致性。
2024-10-29 20:38:22
1603
原创 如何开发一个能够开发低代码平台的平台
比如说开发一个ORM模型和一个工作流模型,它们应该共享50%以上的公共知识,这样才能说一个平台X可以用于开发这两个不同的模型。也就是说模型由元模型定义,元模型由元元模型定义,这个链条可以一直继续下去。在Nop平台中xdef定义元模型,而xdef.xdef定义元元模型,从而截断了这个链条。最终我们只需要xdef即可,xdef采用xdef来定义它自身。,在概念层面上PlatformX起到一个生成器的作用,它根据WorkflowDesignerSpec的定义生成一个WorkflowDesigner。
2024-10-28 08:35:54
202
原创 函数式编程为什么有利于解耦(Decouple)
最近面试中发现很多人对于函数式编程的理解就是Lambda表达式和flatMap/map/join这种集合处理函数,对于函数式编程为什么有用,在什么场景下有用只有很模糊的感觉。在本文中,我就简单介绍一下函数式编程的思想以及在我们日常编程中如何应用函数式编程来实现逻辑解耦,函数式编程在哪些方面提供了对于面向对象编程的一种有益的补充。什么是函数式编程?以下是智谱清言AI的回答:函数式编程(Functional Programming, FP)是一种编程范式,它强调将计算过程构建为一系列的函数调用。=====
2024-10-28 08:34:09
1277
原创 如何用800行代码实现类似poi-tl的可视化Word模板
在没有太多结构知识的情况下,我们能否有效的操作这些结构,能否实现这些结构的模板化?可逆计算理论的回答是可以。gitee:github:可逆计算原理和Nop平台介绍及答疑_哔哩哔哩_bilibili。
2024-10-27 10:10:25
757
原创 采用Excel作为可视化设计器的开源规则引擎 NopRule
通过元模型来定义领域模型尽量通过自动推导实现模型之间的双向转换,减少硬编码通过复用底层的通用模型,如Filter、Expression等,我们可以快速组装出更复杂的领域模型,如规则模型gitee:github:可逆计算原理和Nop平台介绍及答疑_哔哩哔哩_bilibili。
2024-10-27 10:01:07
1227
1
原创 从可逆计算看AI时代的复用
已知的逻辑结构和逻辑推导路径完全可以用技术中立的形式得以表达,即业务逻辑的表达形式本身也可以被复用,我们复用的是结构规律本身,而不是某种固化的成品。在我看来,这只是对传统僵化的复用实践的一种批判。但真正最有价值的复用是业务逻辑本身的复用,即业务逻辑已经表达清楚,最后如何转换成可执行代码本身,这一点可以通过代码生成器进行,甚至使用AI工具辅助进行,但是他们处理的都是逻辑的实现层面,而业务逻辑本身应该是以无歧义、可分析的形式被复用。传统上的复用是僵化的、固化的,即信息被绑定在一定的技术表达形式中。
2024-10-26 08:26:45
439
原创 业务开发如何才能独立于框架
在一文中,我提到一个概念,(framework agnostic),并指出,。有些人读后提出疑问:就目前而言,没有任何业务开发完全独立于框架,这个概念有什么意义?讨论群中有热心同学回复到:软件开发依赖框架是因为要用到框架提供的输入输出,事件回调,依赖注入,外部数据读写,上下文等,大多数都是程序运行依赖的副作用。如果做一个业务的时候,按照一个库去设计,将所有的副作用都显式的声明为接口和上下文对象, 有个中间层去衔接框架和设计出来的业务库,那么这个业务库就可以不依赖框架了。
2024-10-26 08:25:43
718
原创 从可逆计算看低代码
2020年低代码(LowCode)这一buzzword频繁亮相于主流技术媒体,大背景下是微软/亚马逊/阿里/华为等巨头纷纷入场,推出自己的相应产品。一时之间,大大小小的技术山头,无论自己原先是搞OA/ERP/IOT/AI的,但凡认为自己有点技术的厂商,不说改旗易帜,至少也要加绣一条LowCode的花边,表示不落人后。
2024-10-25 21:12:04
1307
原创 可逆计算理论中的可逆到底指的是什么?
举例来说,Nop平台提供了DSL对象和Excel之间的可逆转换:无需编程,可以解析Excel文件得到DSL对象,同时也可以将DSL对象导出为Excel文件。
2024-10-25 21:10:13
1124
原创 NopReport为什么是一个非常独特的报表引擎?
NopReport与一般的报表引擎不同,它可以直接采用Excel和Word作为模板,而不一定需要使用专用的可视化设计器。NopReport的介绍参见和但是有些人看了介绍之后,感觉不到它的独特之处,提出如下疑问:这种方法其实老早就有人会了吧?大家都知道word其实就是xml,可以直接用模板引擎填充。整体有什么特别颠覆认知的东西吗?jxls也是用excel的批注来写模板语法。要体会到NopReport设计的创新之处,必须要跳出具体的功能细节层面,从更抽象的数学结构层面去思考。
2024-10-25 14:28:10
931
原创 非线性中国式报表引擎NopReport源码解析
通过向报表引擎中注册全局函数。NopReport并没有定义任何特殊的函数接口,可以将任意的Java静态函数注册为表达式函数。而一般的报表引擎中定义的函数专为报表引擎设计,无法在报表引擎之外使用。编写也要符合一定的规范,需要有报表引擎相关的知识才能编写。目前内置的函数参见。
2024-10-25 14:23:48
1219
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人