各种构思了好长时间,竟然发现有人做了nocobase。你们广告打的太少了。
通用引擎概述
devUser进行设计自己的业务页面,业务逻辑,业务数据模型等
endUser进行使用。
如何进行设计和基础功能,由我们决定。
通用数据模型meta_model
meta_model是一个通用数据模型
新建meta_model的页面为三个选项卡页面,
第一个选项卡为meta_model_page
第二个选项卡为meta_model_config
第三个选项卡为meta_model_log
下文的设计好的meta_model数据模型需要对应到相关选项卡里。
devUser可以对meta_model进行增删改查等操作。
endUser进行使用和浏览。
devUser新建一个meta_model,然后根据新建时候的属性配最终决定meta_model的作用
比如,devUser想设计一个用户模块,
首先需要新建用户表,
对应的meta_model方式,新建一个model_model ,然后选项卡meta_model_config里启用主表单属性,对应的meta_model_page启用表单设计器,由devUser进行表单设计。
此例子中的用户表,应该有字段用户名,邮箱,手机号等。用户设计好表单然后保存。
然后是权限表,设定权权限名称字段,然后添加一个子表,用来添加权限可以访问的meta_model,
角色表,设计角色字段,admin,dev,defaultUser,guest,同样的设计一个子表用来添加角色拥有的权限名称。
等这些基础表都设计完成后进行页面设计和逻辑设计。
首先是登录页面,新建一个meta_model,项卡meta_model_config里启用page功能,然后主选项卡变为page编辑。可以放两个输入框,两个label,一个button组件。
就是用户名:密码:登录,注册等等适合登录界面相关的。然后再button组件的属性里设置action选项,可以选择对应的动作,此处应该选择login_auth(假设我们封装好了这个动作),动作选择后,后面会相应展示该动作应该配置哪些选项,此次我们应该提供一个meta_model主表候选列表,然后在表里选择需要认证的字段,字段选择完成后,可以进行登录认证完成后的相关选项,比如跳转页面,再比如session作用域。
注册button,endUser可以直接进行一个跳转动作绑定,由devUser设计的用户表再编辑模式保存后,endUser访问可以由两种形式,一个是新建,一个是列表形式。此处我们应该绑定新建模式,用户点击注册button,页面跳转的指定的用户主表的新建页面,
此页面为通用页面,用户填入相应的数据后由提交按钮。提交后就会在此表中创建一个新的条目。这样用户的新建,登录等流程就设计完毕。
- 数据 → meta_model(动态表)
- 界面 → page meta_model(动态页面)
- 逻辑 → task_engine(自动化)
- 安全 → 权限配置(RBAC)
所有的模块实现都由meta_model,task_engine和componet构建。这样实现零代码平台,让用户自己设计自己的业务页面,业务逻辑,业务数据模型。
我们只搭建好基础平台就行。
前端项目名称为:meta_client
后端项目名称为:meta_server
I规划:使用angular+material ui +Material Design icon模仿
通用数据模型
meta_model: (源模型基础模型)
meta_model_id: 源模型id
meta_model_name: 元模型名称
meta_model_log:
meta_model_log_id: 元模型日志id
meta_model_id: 元模型id
meta_model_opration_log: 元模型操作
meta_model_config:
meta_model_config_id: 元模型配置id
meta_model_id: 元模型id
meta_model_config: 元模型配置
meta_model_dynamic: (元模型动态模型)
meta_model_dynamic_id: 元模型动态id
meta_model_id: 元模型id
meta_model_dynamic_layout: 元模型动态布局(jsonb格式)
meta_model_dynamic_form: 元模型动态表(jsonb格式)
meta_model_dynamic_sub:(元模型动态模子表,用来存储子表表结构)
meta_model_dynamic_id: 元模型动态id
meta_model_id: 元模型id
meta_model_dynamic_subform:子表表结构
meta_model_dynamic_engine: 元模型动态引擎
meta_model_dynamic_engine不是数据模型,是后台的一个用来解析meta_model_dynamic的引擎。
比如用户自定义了一个app对象,app对象的meta_model,meta_model_log,meta_model_config,meta_model_dynamic都进行了post操作,数据库都会新建一个条目。
在新建条目的同时meta_model_dynamic_engine会收到meta_model_dynamic_form这个字段值,然后负责解析meta_model_dynamic字段值中用户定义好的表单结构。
根据解析结果动态创建一个或多个新的表,每个表的表名是meta_model_id_+动态表单的form_name,字段名由form_name+用户设计的字段名组成。如果有子表,那么子表的表名由meta_model_id_+动态表单的form_name+_+子表的form_name组成,字段名由子表的form_name+用户设计的字段名组成。
举例一个子表示例:
用户需设计一个商品出库单,表单字段有,出库时间,出库数量,出库操作人,然后是一个列表,列表字段有,商品名称,商品数量,商品单价,商品金额。这个列表就设计为子表。
拓展:
支持添加更多子表行,
支持后续统计计算(如总金额)(由用户自己设定统计方法)当然了我们应该封装好这些功能给用户选择。
前端计算 + 提交 在表单中 JS 实时计算,提交时带入
后端插入时计算 INSERT 时由服务端计算 amount
数据库生成列(Generated Column) PostgreSQL AS (quantity * unit_price)
视图(View) 创建视图暴露计算结果
任务引擎:Server_Task_Engine
用来处理用户设计的任务,任务包括但不限于:
1. 数据处理任务
2. 业务逻辑任务
3. 通知任务
4. 其他自定义任务
设计方法论:
+------------------+
| Frontend (UI) |
| 定义任务逻辑 |
+--------+---------+
|
| 提交 JSON 任务定义
v
+-------------------------------+
| Backend (FastAPI) |
| 接收任务定义 → 存入 DB |
| 触发 Celery 任务 |
+--------+----------------------+
|
| 发布到 Redis Queue
v
