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 入库
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
# 领域驱动设计(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` 之于 `Password`,`Session` 之于其状态机),根负责保证整体一致性;不允许绕过根直接改内部对象。
|
||||
|
||||
6. **判断"该不该独立 CRUD"**
|
||||
子概念若无独立生命周期(密码脱离用户无意义),它就不该有独立的增删改查,而是宿主聚合的行为。
|
||||
Reference in New Issue
Block a user