从业20载,从当初的兴奋,到最后的麻木,甚至怀疑: 程序员是不是就是在不断的学习各种技术, 然后做着同样的重复劳动(体力劳动),在各种业务系统上用各种技术做同样的增删改查。 对的,不管说着多牛逼的技术术语,做多高大上的软件,本质上就是增删改查, 并且充斥着大量重复的模板代码。抽象一下,不考虑技术,不考虑业务,他们是不是都一样的呢。
那么有没有一种可能,能帮助我们减少这些模板代码? AI?低代码开发工具?
YDUIBuilder是另一种尝试,一种探索, 上学时老师告诉我们:程序 = 数据结构 + 算法; 从业多年的经验告诉我:软件 = UI + 数据 + 业务逻辑。 不管是前后端分离开发还是全栈开发,技术人员都在UI和数据上花了最多的时间,YDUIBuilder尝试 通过可视化的方式来减少这部分的重复工作量,并尽可能的重用,比如我们可以把软件看着是由开发框架 + UI框架组成的。
其中开发框架决定软件的代码怎么组成,比如VUE,React,ios,android,小程序,原生H5,鸿蒙等; UI框架定义人机交互等界面,比如Bootstrap,Vant。 在YDUIBuilder上,我们尝试让代码在这些框架间一键迁移成为可能。
- nodejs 18.20+
- npm 10.7
- php 7.3+
- rabbitmq
UI+框架 | UIBuilder | 预览器 | 编译器 |
---|---|---|---|
Bootstrap + H5 | ✅ | ✅ | ✅ |
Bootstrap + Vue3 | ✅ | ✅ | ✅ |
Vant + Vue3 | ✅ | ✅ | ⌛ |
Vant + 微信小程序 | ✅ | ✅ | ⌛ |
- 20241204 编译bootstrap5+vue3代码本次更新未做数据库自动升级,需要删除原来的数据库后重新执行db_init.sql文件
- 20240910 增加docker支持,一键安装;支持php 8;新增表单数据验证支持,并可自定义错误的展示方式;新增标签容器,可根据绑定的数据切换显示内容
- 20240611 本次更新后不光只是做界面,还可以编译出功能代码,加入了数据和事件,数据可与UI进行绑定,可做完整的人机交互功能(数据的获取,接口的调用,响应数据的展示),事件及代码目前只支持HTML+Bootstrap。本次更新未做数据库自动升级,需要删除原来的数据库后重新执行db_init.sql文件
- 前端交互事件
- 前端UI绑定数据的输入(展示数据)和输出(为数据赋值)
- API调用:可视化设置API的请求和相应处理
- UI支持伪类定义
- UI State:通过数据来决定UI的样式
- 新增YDAPIBuilder项目,管理API的输入和输出
- 支持UI 组件,UI组件可自定义事件
- 20240325 增加vue的支持
- 20240314 增加微信小程序的支持
- 下载的代码包含四个项目目录:ydevcloud,yduibuilder,snapshot,ydapibuilder,yangzie
- ydevcloud: 管理后端:
- 项目管理
- 编译生成UI代码
- yduibuilder: 开发前端,拖拽式生成界面和设置属性
- snapshot: 页面截屏工具 (可选)
- ydevcloud/code/cli:socket服务,用于编译打包生成代码 (可选)
- ydapibuilder:API管理工具,管理接口信息
- yangzie: 模拟api接口
http://ydecloud2.yidianhulian.com
所有服务运行在docker容器内(基于ubuntu系统),但代码在你主机上。 容器内所有的服务和配套都已经按照好了,但node项目并没有上传node_modules, 所以node项目第一次运行的时候需要npm i按照需要的模块。 同时各种服务建议都用一个终端运行,方便查看日志
-
下载镜像 pull 镜像: docker pull gzydhl/ydecloud
-
运行镜像:
docker run -it -p 8080:8080 -p 9999:9999 -p 9998:9998 -p 8888:8888 -p 8181:8181 -v 你本地的目录:/var/www/html gzydhl/ydecloud /bin/bash
- 这里会把后台项目端口8080,yduibuilder项目端口9999,apibox项目端口9998,yangzie项目端口8181,socket服务端口8888在主机和docker内部服务之间做个映射。
你本地的目录
就是主机上下载的代码的根目录(包含ydevcloud,yduibuilder的目录)
-
启动apache2 service apache2 start
-
启动mariadb service mariadb start
-
启动rabbitmq-server service rabbitmq-server start
-
启动截图服务
- 进入 /var/www/html/snapshot目录
- 第一次需要执行: npm i
- node --experimental-modules server.mjs
-
启动yduibuilder(9999端口)
- 新建一个命令行窗口,执行docker exec -it 你的容器ID /bin/bash
- 进入/var/www/html/yduibuilder目录
- 第一次需要执行:npm i
- npm run serve
-
启动ydapibuilder(9998端口)
- 新建一个命令行窗口,执行docker exec -it 你的容器ID /bin/bash
- 进入/var/www/html/ydapibuilder目录
- 第一次需要执行:npm i
- npm run serve
-
启动swoole 8888端口
- 新建一个命令行窗口,执行docker exec -it 你的容器ID /bin/bash
- 进入/var/www/html/ydevcloud/code/cli目录
- php build.php
-
在你主机浏览器上访问localhost:8080即可
你也可以选择部分在docker容器,部分在自己的主机上运行,比如在自己的主机上用IDE打开yduibuilder,ydapibuilder;这需要参考下面具体项目的手动安装; 同时需要修改下对应项目中配置的端口地址
- 本地需要安装php 7.4+环境并安装swoole、openssl、zip、xml、gd2,json、iconv、curl扩展,
- 安装mysql或者mariadb数据库
- windows上php需要配置系统环境,以便在命令行能访问php.exe
- 安装rabbitmq(可选,如果要生成页面截屏则安装)
- 这是一个vue3项目,用你的开发工具打开项目
yduibuilder
- 打开 src/lib/ydhl.ts,配置如下信息
api
就是ydecloud管理后端的访问域名,也就是《安装ydecloud 管理后端》中的SITE_URIuploadApi
就是《安装ydecloud 管理后端》中的UPLOAD_SITE_URIsocket
就是《安装ydecloud 管理后端》中的SOCKET_HOST
- 进入到yduibuilder/yduibuilder目录后:
npm i --legacy-peer-deps
- 进入到yduibuilder/yduibuilder目录后:
npm run serve
- 默认情况 yduibuilder运行在9999端口上,如果有冲突,就修改package.json文件中scripts的对应设置,并修改《安装ydecloud 管理后端》中的UI_BUILDER_URI
- yduibuilder不要直接访问,他是通过后端ydecloud进入
- 初始化数据库: 导入
db_init.sql
创建数据库,db_update.sql
执行数据库更新 - 修改
ydevcloud/code/app/__config__.php
中的配置, 在config方法中配置数据库信息default_db
: 你的数据库名称db_host
: 访问地址db_user
: 用户名db_port
: 访问端口db_psw
: 密码SITE_URI
: 为你本地设置的虚拟域名UPLOAD_SITE_URI
: 为上传文件的访问域名,该演示环境上传的文件都放到upload下,所以就是你的域名加upload/
UI_BUILDER_URI
: yduibuilder前端的访问地址,如果没有端口冲突,则不用做更改API_BUILDER_URI
: ydapibuilder前端的访问地址,如果没有端口冲突,则不用做更改SOCKET_HOST
: socket后端的地址,如果没有端口冲突,则不用做更改- RABBITMQ_HOST,RABBITMQ_PORT,RABBITMQ_USER,RABBITMQ_PWD:为rabbitmq的访问信息,根据本地部署情况填写
- 配置管理后端的访问域名;管理后端基于yangzie php开发框架开发,单入口模式,需要配置一个虚拟域名,指向工作目录
ydevcloud/code/app/public_html
- 访问你配置的虚拟域名,如果能看到如下界面,则说明配置成功
- 点击使用则直接使用,无需登录
- 安装composer包:
composer install
- 访问你的域名,剩下的自己探索吧
- 这是一个vue3项目,用你的开发工具打开项目
ydapibuilder
- 打开 src/lib/ydhl.ts,配置如下信息
api
就是ydecloud管理后端的访问域名,也就是《安装ydecloud 管理后端》中的SITE_URIapiBuilder
就是自己等访问路径socket
就是《安装ydecloud 管理后端》中的SOCKET_HOST
- 进入到ydapibuilder/ydapibuilder目录后:
npm i --legacy-peer-deps
- 进入到ydapibuilder/ydapibuilder目录后:
npm run serve
- 默认情况 ydapibuilder运行在9998端口上,如果有冲突,就修改package.json文件中scripts的对应设置,并修改《安装ydecloud 管理后端》中的UI_BUILDER_URI
- ydapibuilder不要直接访问,他是通过后端ydecloud进入
socket服务是用swoole写的,请先确保安装了对应的swoole扩展;进入到ydevcloud/code/cli中 运行 php build.php即可;如没有安装则不能打包下载项目代码
截图服务是snapshot,是nodejs开发
- 用你的开发工具打开snapshot
npm i
- 启动rabbitmq /usr/local/sbin/rabbitmq-server
- 启动snapshot node --experimental-modules server.mjs
更多案例视频请抖音搜索易点互联或者关注易点互联的视频号
- 目前暂不支持php8,如果要使用php8,可根据提示修改相关保存代码
- 需要修改mysql的sql_mode,把only_full_group_by去掉,修改方法请自行咨询AI
项目使用了其他开源作品,在此感谢这些项目成员的辛勤付出(排名不分先后):