ruflo-ddd 聚合根脚手架实战:用 ddd-aggregate 技能在 bounded context 中生成 Entity、Value Object、Repository 与领域事件
ruflo-ddd 聚合根脚手架实战用 ddd-aggregate 技能在 bounded context 中生成 Entity、Value Object、Repository 与领域事件【免费下载链接】ruflo The original agent meta-harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, RAG integration, and native Claude Code / Codex / Hermes and many more Integrated项目地址: https://gitcode.com/GitHub_Trending/cl/ruflo聚合根Aggregate Root是 Domain-Driven DesignDDD中维护业务不变量的一致性边界。ruflo 仓库内置的ruflo-ddd插件提供了ddd-aggregate技能一条命令即可在一个已存在的 bounded context 中生成聚合根实体、值对象、仓库接口、领域事件与单元测试桩并把领域模型持久化到 AgentDB 图存储中供后续会话导航。读完本文你将掌握/ddd-aggregate context aggregate-name的完整调用流程、每一层产物的结构与约束、配套的ddd-context/ddd-validate校验体系以及如何用 smoke 脚本验证整个插件的契约完整性。一、ddd-aggregate 技能是什么ddd-aggregate是ruflo-ddd插件提供的三个技能之一另两个是ddd-context与ddd-validate定义在 plugins/ruflo-ddd/skills/ddd-aggregate/SKILL.md。它的定位是Scaffold a complete aggregate root inside a bounded context.技能 frontmatter 中的argument-hint为context aggregate-name调用方需传入两个 kebab-case 参数context-name已存在的 bounded context 名与aggregate-name要新建的聚合根名。例如向ordering上下文中添加order聚合/ddd-aggregate ordering order该技能会一次性生成实体 仓库 事件 测试桩四件套并把聚合节点写入 AgentDB 分层图这正是 ADR-0001 中定义的插件契约的一部分见 plugins/ruflo-ddd/docs/adrs/0001-ddd-contract.md。触发时机按 SKILL.md 的description定义以下场景适合调用它向一个已有 bounded context添加新聚合建模一个拥有自身不变量invariants的新业务概念生成 entity repo events 三件套样板代码。二、前置条件bounded context 必须已存在ddd-aggregate的第 1 步就是校验前置条件确认src/context/domain/目录存在。如果不存在技能会建议先运行/ddd-context context创建 bounded context——也就是说ddd-aggregate假定你已经在src/下建立了上下文结构。上下文的标准目录结构由 plugins/ruflo-ddd/skills/ddd-context/SKILL.md 定义src/context-name/ domain/ entities/ # Entities and aggregate root value-objects/ # Immutable value objects events/ # Domain events services/ # Domain services repositories/ # Repository interfaces application/ # Use cases / application services infrastructure/ # Repository implementations, ACL adapters index.ts # Public API of the contextddd-context技能还要求为entities、value-objects、events、services、repositories各生成一个index.tsbarrel 导出文件并在domain/index.ts中汇总再导出最后在src/context-name/index.ts中只 re-export domain 与 application不导出 infrastructure——这是保护领域层不被基础设施污染的关键纪律。创建完成后上下文会以context:context-name节点写入 AgentDB 分层图。三、ddd-aggregate 完整执行流程10 步拆解以下是 ddd-aggregate/SKILL.md 的完整步骤结合仓库源码逐层展开。第 1 步校验上下文存在确认src/context/domain/已存在否则提示先运行/ddd-context context。第 2 步Pre-task hook执行npx claude-flow/clilatest hooks pre-task --description DDD aggregate: aggregate-name in context该 hook 会记录任务开始配合第 10 步的 post-task hook 形成闭环供后续神经训练与任务追踪使用。第 3 步创建聚合根实体Aggregate Root Entity文件路径src/context/domain/entities/aggregate-name.entity.ts必须包含四要素唯一 ID 字段unique ID field构造函数内做不变量校验constructor with invariant validation执行业务规则的领域方法domain methods that enforce business rules基于身份identity的equals()。同时要求导出一个实现或继承基础AggregateRoot接口的 TypeScript 类。这意味着聚合根内部的状态变更必须经由其领域方法而非外部直接 set——ddd-validate技能会专门扫描绕过校验的公开 setter来核查这一点详见第四节。第 4 步创建值对象Value Objects文件路径src/context/domain/value-objects/aggregate-name-id.value-object.ts要求是不可变immutable的 ID 值对象带工厂方法与校验。技能还会建议为聚合根的其他属性补充更多值对象。参照 plugins/ruflo-ddd/REFERENCE.md 中的定义值对象是没有身份、按值相等、无副作用的描述性对象——例如金额、地址、订单号都适合建模为值对象。第 5 步创建仓库接口Repository Interface文件路径src/context/domain/repositories/aggregate-name.repository.ts必须包含findById、save、delete三个方法并以聚合根与 ID 值对象作为类型参数。这是纯接口不提供实现——实现属于基础设施层infrastructure的关注点会被放置在infrastructure/目录。这也是 DDD 的经典依赖倒置领域层定义持久化契约基础设施层负责兑现。第 6 步创建领域事件Domain Events生成两个事件文件src/context/domain/events/aggregate-name-created.event.tssrc/context/domain/events/aggregate-name-updated.event.ts每个事件需包含事件名过去时态past tense、时间戳、聚合 ID、payload。REFERENCE.md的命名约定进一步给出示例OrderPlaced、InvoiceVoided、CustomerEmailChanged这类 PascalCase 过去时命名。领域事件是已经发生的事情的记录因此必须不可变且ddd-validate会专门检查事件是否携带聚合 ID。第 7 步创建单元测试桩Unit Test Stubs文件路径src/context/domain/entities/aggregate-name.entity.test.ts覆盖三类用例构造不变量construction invariants领域方法行为domain methods相等性equality。测试命名采用describe/itshould [behavior] when [condition]的句式例如should reject negative quantity when constructing Order。第 8 步更新 barrel 导出将新文件加入对应目录的index.tsbarrel 文件中entities、value-objects、repositories、events 各自的 index.ts与ddd-context生成的 barrel 结构保持一致。第 9 步持久化到领域模型图将聚合写入 AgentDB 分层图与任务记忆mcp__plugin_ruflo-core_ruflo__agentdb_hierarchical-store --parent context:context --child aggregate:aggregate-name --relation contains mcp__plugin_ruflo-core_ruflo__memory_store --key ddd-aggregate-context-aggregate-name --value AGGREGATE_SUMMARY --namespace tasks这样aggregate:aggregate-name节点就以contains关系挂在context:context节点之下。REFERENCE.md中给出了更完整的图存储配方——上下文依赖可以用因果边causal edge表达mcp__plugin_ruflo-core_ruflo__agentdb_hierarchical-store --parent context:ordering \ --child aggregate:order --relation contains mcp__plugin_ruflo-core_ruflo__agentdb_causal-edge --from context:ordering \ --to context:inventory --type depends-on mcp__plugin_ruflo-core_ruflo__agentdb_causal-edge --from context:ordering \ --to context:payments --type publishes-events-toREFERENCE.md建议项目级标准化的边类型包括depends-on同步耦合、publishes-events-to即发即忘的事件流、translates-via-acl-to防腐层翻译、conforms-to下游原样采用上游模型。第 10 步Post-task hooknpx claude-flow/clilatest hooks post-task --task-id ddd-aggregate-aggregate-name --success true --train-neural true开启--train-neural true会把本次成功模式沉淀到神经学习中使后续聚合建模继承既有模式。四、配套校验ddd-validate 如何守住聚合纪律聚合根脚手架生成后边界与不变量需要持续被审计。ddd-validate技能plugins/ruflo-ddd/skills/ddd-validate/SKILL.md提供四类检查正好回扣ddd-aggregate产物的约束类别检查内容对应聚合产物约束BOUNDARY扫描src/*/domain/下所有.ts的 import发现直接深入其他上下文domain/目录的导入即标记违规只允许通过对方公开index.tsapplication 层导入聚合根不应被跨上下文直接 importINVARIANT扫描聚合根实体的公开 setter 是否绕过校验、可变公开属性是否无校验、子实体是否被直接暴露必须经聚合根访问聚合根是唯一变更入口EVENT事件是否过去时命名、是否不可变无公开 setter、是否携带聚合 ID事件命名与不可变约束REPOSITORY仓库接口必须在domain/repositories/而非infrastructure/实现必须在infrastructure/而非domain/每个聚合根恰有一个仓库接口与实现分层、一对一阵列ddd-validate还会输出违规表文件路径、行号、违规类型、建议按类别与严重度汇总并将结果写入任务记忆npx claude-flow/clilatest memory store --key ddd-validation-TIMESTAMP --value RESULTS_SUMMARY --namespace tasks npx claude-flow/clilatest hooks post-task --task-id ddd-validate --success true --store-results true它可当作 CI gate 使用在合并跨切变更前拦截边界侵蚀。五、通过 /ddd 命令驱动技能ddd-aggregate技能由/ddd命令plugins/ruflo-ddd/commands/ddd.md路由命令共 6 个子命令子命令行为ddd context create name调用/ddd-context技能搭建 bounded contextddd context list扫描src/*/domain/列出全部上下文find src -maxdepth 2 -name domain -type dddd aggregate context name调用/ddd-aggregate技能生成聚合根四件套ddd event context name生成单个领域事件类过去时命名 时间戳 payload 接口 静态工厂方法并注册到事件 indexddd validate调用/ddd-validate技能检查边界违规ddd map扫描所有上下文、分析 import 依赖输出上下文关系图upstream/downstream、ACL、shared kernel、published language以及直接 import 导致的边界违规六、领域建模者 Agent 与命名规范ruflo-ddd提供domain-modeleragentplugins/ruflo-ddd/agents/domain-modeler.mdmodel 为 sonnet其职责包括识别子域与通用语言、设计带不变量的聚合根、定义领域事件与命令、生成防腐层接口。它的工作流与ddd-aggregate技能互补先在内存中检索既有领域模型memory search --query bounded context DOMAIN再执行脚手架最后沉淀模式memory store --key ddd-pattern-CONTEXT。命名规范以 REFERENCE.md 为准聚合根PascalCase 单数名词Order、Customer、Invoice领域事件PascalCase 过去时OrderPlaced、InvoiceVoided命令PascalCase 祈使PlaceOrder、VoidInvoice仓库接口AggregateRepositoryOrderRepository领域服务VerbNounServicePriceQuoteService。七、安装与契约验证安装插件claude --plugin-dir plugins/ruflo-dddCLI 固定在claude-flow/cliv3.6 majorminor见 plugins/ruflo-ddd/README.md。插件声明ddd-patternsAgentDB 命名空间kebab-case遵循 plugins/ruflo-agentdb/docs/adrs/0001-agentdb-optimization.md 的命名空间约定并约定不得遮蔽保留命名空间pattern、claude-memories、default。契约以 smoke 脚本为准smoke-as-contract见 plugins/ruflo-ddd/scripts/smoke.sh 与 ADR-0001bash plugins/ruflo-ddd/scripts/smoke.sh # 期望输出: 10 passed, 0 failed10 项结构化检查包括插件版本与关键词acl、value-objects、repositories、mcp3 个技能存在且 frontmatter 含name/description/allowed-toolsagent 与 command 文件齐全/ddd覆盖 6 个子命令REFERENCE.md非空README 固定 v3.6 与命名空间协调ADR-0001 状态为 Accepted且技能中禁止通配符工具授权allowed-tools: *。八、总结ddd-aggregate技能把新增一个聚合根这一高频 DDD 建模操作标准化为一条可复现的命令流程从实体含不变量与equals()、不可变值对象、纯接口仓库、过去时领域事件到测试桩每一步都有明确文件路径与约束配合 AgentDB 图存储领域模型成为可被后续会话与 pathfinder 导航的活图。再叠加ddd-context上下文骨架、ddd-validate边界与不变量审计、/ddd map上下文关系可视化与 smoke 契约测试ruflo 在插件层面形成了一套完整的 DDD 脚手架闭环——这也是在 plugins/ruflo-ddd/README.md 中定义的核心价值把业务领域转化为结构良好的 bounded context并以可导航的图模型沉淀每一次建模决策。【免费下载链接】ruflo The original agent meta-harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, RAG integration, and native Claude Code / Codex / Hermes and many more Integrated项目地址: https://gitcode.com/GitHub_Trending/cl/ruflo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考