SuperAPI AI 工具集

alchemy-domain

智能体与模型

查看项目

更新于 11-07 16:07

技能介绍

用途

alchemy-domain 面向使用 @alchemy.run/domain 构建后端的场景,把后端建模为带类型的消息与纯状态转换。据资料,该模型可在内存中运行以支持测试,也可在生产环境运行于 Cloudflare Durable Objects。

主要能力

  • 将需求拆解为领域构件:事件(过去式命名,如 MoneyWithdrawn)、命令(<Verb><Noun>,如 WithdrawMoney)、拒绝(如 InsufficientFunds)、聚合(单事务内规则成立的实体,如单个账户余额)、视图、策略("每当 X 发生就做 Y")、Saga(含步骤、等待与补偿的长流程)、外部系统、投影、流与查询。
  • 提供工作流顺序:需求拆解 → monorepo 布局(domain、server、web 三个包,每个构件一个带类型后缀的文件)→ 按模板编写构件 → 先用 story 描述行为再实现 → 从 server 包托管到 Cloudflare 并导出 trace、以单个 alchemy stack 部署 → 在 web 包用 foldkit 驱动。
  • 约定:文件名形如 <Noun>.<kind>.ts,kind 包括 .aggregate、.command、.view、.policy、.saga、.projection、.stream、.query、.external、.api、.model,另有 .middleware、.context 和 .rejection;聚合 id 放在 <Aggregate>.id.ts;文件夹即子域;domain 包只依赖 @alchemy.run/domain 与 effect,Cloudflare、Stripe、数据库和 HTTP 会话处理归 server 包;一个模型对应一个 domain 包(限界上下文)。
  • 正确性规则:decide 纯函数、只返回事件或拒绝,不做 I/O;evolve 与 reply 全量且不失败;事件携带 decide 计算出的结果(如 balanceAfter);命令在 rejects 中列出所有可能拒绝;投影写入的存储须经 Api 上的 Domain.Query 暴露而非手写路由;客户端不直接读聚合,而经视图、流或查询读取;策略与投影至少执行一次,副作用须幂等(确定性 id、按 stream:seq 键行);策略中不等待 Saga,而是按聚合键启动并响应其步骤事件;依赖在 toLayer 中解析一次;只构建一个 Layer 并 provide 一次,不链式 Effect.provide;不抛异常,用带标签错误;追踪自动进行,敏感值用 Schema.Redacted。
  • 测试:通过 story 测试模型行为(事件、回复、拒绝、视图与 Saga 结果),不测 Saga 内部步骤;并包含期望 Domain.verify(Model) 为空的测试。
  • 变更清单:为每个新命令建独立文件,加入聚合的 commands 并补 decide/evolve 分支,更新相关视图、策略与投影,必要时经 Api 暴露并附 { description },为正常路径、每个拒绝、每个策略反应与每个查询的授权编写 story,然后运行 domain 包测试、tsc -b 类型检查及 server 与 web 测试。

使用方式

按资料给出的顺序执行:先将需求拆成构件(见 references/modeling.md),再布局 monorepo(references/layout.md),按模板写构件(references/building-blocks.md),用 story 先描述行为(references/testing.md),从 server 包托管到 Cloudflare 并部署(references/hosting.md),最后在 web 包用 foldkit 驱动(references/frontend.md)。文档位于 https://alchemy.run/domain,全部页面列于 https://alchemy.run/llms.txt;完整参考项目为 alchemy 仓库中的 examples/cloudflare-domain(一个带 foldkit 应用的银行示例)。

适用场景

适合需要以领域驱动设计方式构建、以事件与命令建模、并计划部署到 Cloudflare 的 TypeScript 后端项目,尤其是需要测试与生产共用同一模型、需要长流程编排或跨存储读写分离的系统。

限制

资料未提供安装命令、收费方式、平台兼容范围(除 Cloudflare 外)或性能指标,这些暂未提供。资料中的具体规则与约定需按原文遵守,不能自行推断额外功能。