Files
scaffold/template/.claude/rules/ddd.md
T
baozaotumao 39fe248f9f feat: 重组为标准 skill 包结构 + 修复 verify.sh bash 3.2 兼容
- 新增 .claude/skills/new-project/SKILL.md(标准 skill 格式)
- install-skill.sh 安装时组装 SKILL.md + verify.sh,单一源无重复
- verify.sh 改用索引数组替代 declare -A,兼容 macOS bash 3.2
- log_pass/log_skip 显式 return 0,避免 set -e 下非 verbose 误退出
- README 改为 skill 优先;补全 copier.yml/scripts/template 入库
2026-06-01 21:19:45 -07:00

2.8 KiB
Raw Blame History

领域驱动设计(DDD

统一语言(术语表)+ 领域建模规约(6 条强制)。

本项目领域优先:先建模领域,再落实现。任何编码前须完成领域建模,模型即代码结构的蓝图。

统一语言(Ubiquitous Language

代码、注释、提交、文档、对话一律使用同一套领域术语,禁止同义异名:

术语 定义
会话 Session 一次端到端生成交互的生命周期聚合根
演示文稿 Deck 生成的 HTML 演示文稿,领域核心产物
幻灯片 Slide Deck 内的单页
主旨 Intent 用户表达的演示意图
风格 Style 视觉美学配方(Aesthetic Recipe
风格预览 StylePreview 供选择的候选样张
精修 Refinement 对已生成 Deck 的迭代修改
检查点 Checkpoint 可恢复的会话状态快照
端口 Port 领域对外部能力的抽象接口(LLM / 图片 / 导出 / 存储)

术语变更须同步更新本表、代码标识符与契约,三者恒一致。

领域建模规约(强制)

目标:让后续未预见的变化只改一处(变化局部化)。不追求初期设计周全,追求封装良好——围绕「易变的决策」隐藏信息(Parnas Information Hiding)。以下为硬约束:

  1. 按意图建模,不按 CRUD 建模 领域对象暴露的是领域操作change_password / authenticate / refine),不是数据表的增删改查。先问"这个对象能做什么",而非"它有哪些字段的 getter/setter"。

  2. 易变规则收拢为值对象(Value Object 有规则、有约束的概念不用裸标量表示。规则全封进值对象,一处定义、全局复用。 反例:password: str,加密/校验规则散落各处 → 改一条动全身。 正例:Password 值对象(不可变、构造即自校验、matches() 比对),换算法/加规则只改它。

  3. 禁止暴露裸可变属性(封装 + Tell-Don't-Ask 不写 obj.x = v 这种外部直接改内部状态。通过意图方法操作,方法内强制不变量。 user.change_password(raw)  user.password = hash(raw)

  4. 充血模型,非贫血模型 数据与操作它的行为放在一起。领域逻辑属于领域对象/领域服务,禁止把领域规则泄漏到 application/service 层做成一堆过程式代码。

  5. 聚合根守护不变量 外部只能经聚合根操作其内部(如 User 之于 PasswordSession 之于其状态机),根负责保证整体一致性;不允许绕过根直接改内部对象。

  6. 判断"该不该独立 CRUD" 子概念若无独立生命周期(密码脱离用户无意义),它就不该有独立的增删改查,而是宿主聚合的行为。