< 返回版块

philipgreat 发表于 2026-05-30 07:41

Tags:ddd, ai coding, natual language

作为 Rust 开发者,我们在享受其极致性能与内存安全的同时,不可避免地要面对一个残酷的现实:用 Rust 写业务逻辑(尤其是复杂的 CRUD 和多表关联)实在太痛苦了。

每当面对一个复杂的企业级业务,我们往往把 80% 的精力花在了编写枯燥无聊的“数据库胶水代码”上:

  • 手写大量的 JOIN、字段映射和 Optional 级联加载;
  • 面对嵌套多层的关系对象,为了防范 None 崩溃,被迫写出无数个丑陋的 matchand_then
  • 保存一个包含多层级联的实体图时,要小心翼翼地在事务中排好保存顺序,生怕外键约束报错。

TeaQL-RS 正是为了颠覆这种糟糕的开发体验而生的。它倡导以**领域模型(Domain Model)**为中心,为开发者自动生成极其现代、安全且极具表现力的 Rust API。

今天,我们完全抛开底层的宏实现或数据库原理,纯粹从“开发者使用体验”的角度,来看看 TeaQL-RS 是如何让 Rust 业务开发变得行云流水的。


一、 开发者的 TeaQL 极简开发旅程

使用 TeaQL-RS 开发一个业务服务,体验非常简单自然,只需三步:

第一步:在模型中声明你的业务图

抛开建表 SQL 和繁琐的 Rust Struct 声明,你只需要在一个极简的 XML/KSML 文件中声明你的实体和它们的关系。例如,一个典型的电商“商家-平台-员工”模型:

<?xml version="1.0" encoding="UTF-8"?>
<root name="merchant-service" org="example" data_service="postgres">
  
  <!-- 平台 -->
  <platform name="Shopify" />
  
  <!-- 商家:级联关联 platform,包含状态和创建时间 -->
  <merchant
      name="Tea Store"
      platform="platform()"
      status="enabled|disabled"
      create_time="createTime()" />
      
  <!-- 员工:属于商家 -->
  <employee
      merchant="merchant()"
      name="Ada" />
      
</root>

第二步:一键生成强类型 Crate

运行生成命令,TeaQL 会瞬间为你输出一个标准、干净的 Rust Cargo Crate。这个 Crate 已经包含了所有强类型的实体结构体、完美的查询构建器和全套辅助工具。

第三步:享受极度舒适的业务代码编写


二、 那些让开发体验飞起的“核心黑科技”

一旦生成了 Crate,你在编写 Rust 业务逻辑时,就能享受到以下传统 ORM 绝无仅有的开发体验:

1. 像写自然语言一样的链式级联查询 (Q)

在过去,级联加载关联数据并进行复杂条件筛选,代码会写得非常冗长。 在 TeaQL 中,这一切变成了赏心悦目的流式强类型 API。IDE 的自动补全会一步步引导你构建出完美的查询:

use merchant_service::Q;

let merchants = Q::merchants()
    .select_name()
    // 1. 极其简单的级联投影:只加载 Platform 关联,且只拿 Platform 的 name
    .select_platform_with(Q::platforms().select_name())
    // 2. 语义化的业务过滤器,彻底告别拼写 SQL 字符串的烦恼
    .with_status_are_enabled()
    .have_employees()
    // 3. 完美的分页与排序
    .order_by_create_time_desc()
    .page(1, 20)
    .execute_for_list(&ctx)
    .await?;

没有原始 SQL,没有冗长的 join 代码,所有过滤器都是根据你的模型定义自动生成的。不仅写起来快,重构时编译器更会成为你最可靠的保镖。


2. 再无 Optional 嵌套灾难的安全可选链 (E)

当需要读取多层关联属性(如:商家的 -> 平台 -> 创建者 -> 组织 -> 名字)时,如果中途某个关联在数据库中是空值,传统的 Rust 代码不得不写成这样:

// 传统的痛苦写法
let name = merchant.platform
    .as_ref()
    .and_then(|p| p.owner.as_ref())
    .and_then(|o| o.organization.as_ref())
    .map(|org| org.name.clone());

而在 TeaQL 中,你只需使用 E 链式求值包装器,即可体验到宛如 Swift 或 Kotlin 中 ?. 的无痛链式访问:

use merchant_service::E;

let platform_name: Option<String> = E::merchant(merchant)
    .get_platform()
    .get_owner()
    .get_organization()
    .get_name()
    .eval(); // 极其优雅,一旦中途有空值,安全返回 None,绝不 panic

甚至对于 1-N 的列表关联,依然支持安全链式访问第一个元素:

let first_employee_name = E::merchant(merchant)
    .get_employee_list()
    .first()
    .get_name()
    .eval();

3. 对象图“一键保存”的无痛体验 (save)

在真实的复杂业务里,我们经常需要同时保存一整张实体网(例如:新招募了一个员工,并将他归属到某个现有商家下,同时记录审计日志)。 过去,你需要手动在事务中编写多条 Repository 插入语句,并费尽心思把商家的自增主键 ID 回写到员工的外键中。

在 TeaQL 里,你只需要专注于业务模型本身:

// 1. 从 Q 门面创建新员工,并通过 update_ 方法设置属性,再推入商家的 SmartList 关系中
let mut employee = Q::employees().new_entity(&ctx);
employee.update_name("Bob");
merchant.employee_list().push(employee);

// 2. 一行 save,搞定全部!
merchant.save(&ctx).await?;

TeaQL 会自动分析当前商家和员工的关系,自动开启数据库事务,以最正确的顺序保存商家、获取主键、自动将外键回写到员工中并保存员工,整个过程对开发者完全透明


三、 当业务模型变更时:轻松且安全的“无痛进化”

在实际项目中,业务模型永远在变。今天加个字段,明天加个关联,甚至需要把某个实体升级为“审计日志实体”(只增不改,记录操作人和时间)。

在传统项目里,这种变动往往伴随着灾难:你需要修改大量的手写 SQL、Mapper 以及繁琐的业务校验。

但在 TeaQL 的开发者视角里,流程非常优雅:

  1. 修改模型:在 merchant.xml 中将对象标记为日志实体 _log="true"
  2. 生成校验:TeaQL 的生成器会在生成代码时自动帮你做静态检查。如果你忘记为日志对象定义 timestamp(如 created_at)或者 operator(操作人)字段,生成器会直接拒绝生成并给出精确的人性化报错,绝不把隐患留给运行时。
  3. API 自动同步:生成通过后,原本的实体更新 API 会自动变为不可用(因为日志是不允许修改的),并在编译期通过 Rust 的类型检查报错引导你重构代码。

四、 零门槛安装与极简 CLI 工具链(cargo-teaql

开发工具链的安装与使用如果极其繁杂,会极大削弱开发体验。TeaQL 在 Rust 端为开发者提供了极致精简的 CLI 命令行工具 cargo-teaql(可直接从 crates.io 获取安装),让你在数秒内即可拉起完整的开发沙箱。

1. 快速安装

你只需像安装普通 Cargo CLI 工具一样一键安装:

cargo install cargo-teaql

2. 命令行生成 Rust 数据类库

当你编写好领域模型 merchant.xml 后,使用 gen-lib 命令即可一键请求 TeaQL API 服务并生成强类型 Rust 数据类库:

cargo-teaql gen-lib models/merchant.xml

3. 一键生成可运行的异步主程序工作空间

如果你想快速开始本地业务开发与查询实验,可以使用 gen-workspace 命令一键提取出包含 Tokio 异步运行时、项目依赖配置、CRUD 交互式指南以及动态 AGENTS.md 的可直接运行工作区:

cargo-teaql gen-workspace models/merchant.xml --workspace-dir app-playground/rust-workspace

4. 推荐的本地开发沙箱布局

为了保持生成的类库代码和您自己的业务扩展代码清晰分离,TeaQL 推荐以下极简的本地 Playground 目录布局:

app-playground/
  models/        # 存放领域模型 XML 定义 (如 merchant.xml)
  generate-lib/  # 一键自动生成的强类型 Rust Crate 
  rust-workspace/# 自动生成的 Tokio 异步应用骨架 (以本地 Path 依赖 generate-lib/lib)

这种设计让生成的底座代码对你完全透明、随用随生,而你只需要在 rust-workspace/src 中专注于编写纯净的高层业务逻辑。


五、 结语

作为业务开发者,我们最核心的价值应当是编写清晰、健壮的业务领域逻辑,而不是在数据库底层读写的胶水代码上耗费青春。

TeaQL-RS 给 Rust 开发者带来的是一种前所未有的**“Ergonomics(人体工程学)”式业务开发体验**。它用极简的声明和强健的静态校验,把枯燥的 CRUD 变成了优雅的流式 API,让 Rust 在承载高度复杂的企业级业务时,也能写得像脚本语言一样轻快,同时保留 Rust 坚不可摧的安全边界。

如果你也厌倦了手写 SQL 和繁琐的关联装配,不妨来体验一下 TeaQL 带来的飞一般的开发快感!

即使能写得这么漂亮,你肯定不想写,烧点点Token, 从https://github.com/teaql/teaql-agent-kit去粘贴一些提示词,让AI帮你来干。 审查代码(review code)也是很爽的。


欢迎在评论区分享你对 Rust 业务开发体验的看法,一起探讨如何用最优雅的姿势写出健壮的 Rust 业务服务!


Ext Link: https://teaql.io

评论区

写评论
作者 philipgreat 2026-05-30 07:42

欢迎周末大家来吐槽:)

1 共 1 条评论, 1 页