PGO-多维表格驱动开发的业务系统架构
让业务人员参与设计,让开发人员理解业务
PGO-多维表格驱动开发的业务系统架构
“多维表格驱动开发”这当然是我自己创造的词汇,仅仅表达字面意思,算不上什么理论方法。
1. 初衷与愿景
在传统的业务系统开发中,业务需求转化为数据模型通常需要经过“业务人员 -> 产品经理 -> 开发人员”的漫长沟通链路,容易出现理解偏差。
而多维表格(如 APITable、飞书多维表格)的出现,让业务人员具备了直接构建复杂数据模型的能力(其实更早的还有notion等笔记软件)。
本项目的核心愿景是建立一种混合开发模式:
- 前端/建模:业务人员在多维表格中自行定义数据结构、管理基础数据,享受“开箱即用”的灵活与便捷。
- 后端/工程化:开发人员通过工具链将多维表格的结构“固化”为本地数据库(MySQL),并自动生成高性能的后端 API 服务。
这种模式旨在兼顾业务的敏捷性与系统的稳定性/扩展性,解决纯多维表格方案在数据主权、API 速率限制、复杂事务处理等方面的短板。
2. 当前实现状态
项目目前已完成核心的基础设施建设,打通了“操作多维表格”与“本地代码生成”两大关键环节。
2.1 多维表格 封装 (pkg/papitable)
- 列操作: 支持表结构定义、列管理、视图操作。
- 行读写: 封装了行记录的增删改查。
- 双向同步 (
sync.go): 实现了多维表格与本地数据的增量/全量同步机制。 - 附件管理 (
multiTableAttachment.go): 处理多维表格中的文件附件。
2.2 自动化代码生成流水线 (Makefile & tools/genCURD)
我们构建了一套基于“现有可用代码”作为模板的生成系统,而非传统的文本模板。
- 工作流 (Makefile):
- DB 到 ORM (
make gorm): 使用gentool读取 MySQL 表结构,自动生成 GORM 查询模型 (internal/pkg/db/query). - ORM 到 API (
make curd): 调用tools/genCURD,基于标准模板生成全套 CRUD 服务代码。
- DB 到 ORM (
- 生成器原理 (
tools/genCURD):- 基于简单的字符串替换: 不使用
text/template,而是解析一份真实可编译运行的参考代码 (即abandon_code服务)。 - MARK 标记: 通过代码中的
// MARK REPLACE ...注释定位替换区域。 - 优势: 模板本身就是合法的 Go 代码,可直接编译、测试、重构,维护成本远低于字符串模板。
- 基于简单的字符串替换: 不使用
3. 架构设计图
graph TD
subgraph "业务人员"
User["业务人员"] -->|构建/录入| APITable["多维表格 (APITable)"]
end
subgraph "核心链路"
APITable --> APITable-API
APITable-API <-->|"双向同步(pkg/papitable)"| LocalDB[("本地数据库 (MySQL)")]
LocalDB -->|gentool| GORM["GORM Models"]
GORM -->|tools/genCURD| Service["CRUD gRPC/HTTP 接口"]
end
subgraph "开发人员"
Dev["开发人员"] -->|维护/扩展| Backend["Go 后端服务"]
Backend -->|读写| LocalDB
ClientApps -->|访问| Service
Backend -->|API 服务| ClientApps["其他内部应用/工具"]
end
4. 接下来的计划 (TODO)
目前的断点在于“多维表格结构”到“MySQL表结构”的自动化转化。补齐这一环将闭合整个自动化链路。
- 开发
Schema Converter工具- 输入: 读取 APITable 的表结构(字段名、字段类型、关联关系)。
- 输出: 生成 MySQL 的
CREATE TABLEDDL 语句或直接执行建表。 - 难点: 映射多维表格的特殊字段(如单选/多选标签、成员、双向关联)到关系型数据库范式。
- 适配飞书多维表格或企业微信智能表格,扩大适用场景。
This post is licensed under CC BY 4.0 by the author.