领域驱动低代码-myQ

300 阅读5分钟

前言

早几年对DDD设计是非常向往,对martin flower大师的崇拜。这10多年工作来,学习过net、java、python,各种技术层出不穷,学不完,根本学不完;面对实际项目的开发,我们面临什么问题?项目该如何架构? 如何解决?都有特定的解决方案和理解,那就让我唠一唠!

领域驱动开发(Domain-Driven Design,DDD) 是一种软件设计方法,它强调以业务领域为核心来驱动软件的设计和开发。简单来说,就是让我们的软件更贴近业务,让代码能更好地反映现实世界的业务规则。

领域驱动设计语言:专门用来描述业务领域概念的语言。它不是一种编程语言,而是一种在开发团队和业务领域专家之间建立共同理解的语言。这种语言的目标是,让所有人都能用同样的术语来描述业务问题,从而减少沟通障碍,提高软件开发的效率和准确性。

低代码 是一种软件开发方法,它通过可视化界面、拖拽组件等方式,让开发者能够用更少的代码,甚至不需要写代码,就能快速构建应用程序。

DSL(Domain Specific Languages ) 领域特定语言是一种编程语言,具有更高抽象级别,针对特定问题类进行了优化;领域特定语言通常比通用语言(如 Java、C 或 Ruby)简单。通常,DSL 是与 DSL 设计领域的专家密切合作开发的。在许多情况下,DSL 不是供软件人员使用,而是供精通 DSL 所指涉领域的非程序员使用。

领域驱动低代码: 使用业务领域编程语言,建立业务抽象规则,构建应用程序;

myQ项目:

名词介绍:Q弹,就像糯米丸子吃起来非常好的弹性和韧性

项目介绍:myQ 建立了一套表单和数据列表的DSL; 开发人员基于DSL,即可建立业务抽象规则,输出多场景代码;目前支持Element Plus Vue 、Ant Design Rect 、 Uniapp、figma、Mybatis sql 、若依框架;

项目的起源:

作为一个全栈工程师,在处理一个表单业务时,先构建界面+字段验证,然后写后端数据模型+字段验证;这种重复重复再重复,是不能忍的;自此,我建立了关于表单和数据列表的DSL,期间也遇到不少问题

vs 低代码:

  1. 使用代码设计而不是拖拽的可视化界面设计;
  2. 领域驱动低代码基于业务规则可以支持多平台

vs AI:

  1. AI 输入是自然语言,输入的精准度影响输出
  2. AI需要上下文,没有编辑器支持,它是一次性;反复修改一个业务模型不那么容易
  3. 做一个应用目前不够系统(能否基于一个业务抽象规则,输出 前端页面、java后端代码、测试等代码呢?)

领域驱动低代码的标准:

html+css解决浏览器显示,xml作为数据传输格式,所以它们是领域特定语言;市面上还没有定义领域驱动低代码的标准,那我就基于myQ项目的功能实现,给一个标准吧

  1. 准确描述业务规则,表达清晰
  2. UI控件支持(input、select、datepicker、radio、checkbox、upload、switch等)
  3. 多模态转换,支持业务模型转换为前端UI界面、后端业务处理、测试用例、figma原型设计
  4. 编辑器支持,智能代码补全等

表单:

  • 显示,支持一行一列、一行多列
  • 字段验证,前端+后端共享验证逻辑
  • 数据绑定,select、radio等数据绑定、文件上传等
  • 类型支持,支持字符、数字、日期、布尔
  • 对象关系,一对多,一对多的界面显示和后端的领域模型
  • 测试用例,用例数据来自excel模板, 并且excel用例模板要和界面排列一致

数据列表:

  • 数据展示:字符、金融数字、枚举、日期、tag、一行多列、对其方式)
  • 过滤条件:显示排列、前后端业务处理、select等控件数据绑定
  • 操作:配置操作(新增、删除、审批等) 、 支持行和工具栏

领域驱动设计现状

我理解的DDD,以业务领域为核心来驱动软件的设计和开发 ,而不狭隘于实体、值对象、聚合、领域事件这些概念;DDD需要一套工具的组合,去解决特定业务问题 ,就像jetbrains mps 工具; 不可否认的是领域驱动设计在思想上的启蒙,但是DDD难以落地是目前的现状,也有水土不符的因素;国内软件开发追求短平快,抢于竞争对手,晚一步企业就没有竞争优势;其次是基于成本的考虑

苦恼

我们常常因为一个功能的实现,会陷入不同编程语言或框架的陷阱;我理想的代码编写功能的方式,不拘泥编程语言,不限于框架,不要陷入细节的沼泽; 应该有一个机器,我将业务规则的抽象给它,它输出各编程语言或不同框架的实现;从客户挖掘了需求,就开始建立领域模型,然后输出80%的框架代码,剩下的20% 就是修修补补

结语:

目前myQ是整套工具的集合(包括DSL、Idea 插件、多个UI框架的适配、若依框架集成、excel用例数据、测试集成、figma集成)虽然有一些场景的验证,但还不够充分,所以我认定它还是beta版本,不好意思开源和透露更多技术细节;自2023.11 开发一来,一直不断有想法喷涌而出,在AI盛行的当下也越来越有紧迫感,在缝隙中找到它存在的价值;