BMAD-METHOD/bmad-core/templates/architecture-tmpl.yaml

652 lines
25 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# <!-- 由 BMAD™ Core 驱动 -->
template:
id: architecture-template-v2
name: 架构文档
version: 2.0
output:
format: markdown
filename: docs/architecture.md
title: "{{project_name}} 架构文档"
workflow:
mode: interactive
elicitation: advanced-elicitation
sections:
- id: introduction
title: 引言
instruction: |
如果可用请在开始前审查任何提供的相关文档以收集所有相关背景。如果至少找不到docs/prd.md请询问用户哪些文档将为架构提供基础。
sections:
- id: intro-content
content: |
本文档概述了{{project_name}}的整体项目架构包括后端系统、共享服务和非UI特定的问题。其主要目标是作为AI驱动开发的指导性架构蓝图确保所选模式和技术的一致性和遵守。
**与前端架构的关系:**
如果项目包含重要的用户界面,则单独的前端架构文档将详细说明特定于前端的设计,并且必须与本文档结合使用。此处记录的核心技术栈选择(参见“技术栈”)对整个项目(包括任何前端组件)都是决定性的。
- id: starter-template
title: 入门模板或现有项目
instruction: |
在继续进行架构设计之前,请检查项目是否基于入门模板或现有代码库:
1. 审查PRD和头脑风暴简报中是否提及
- 入门模板例如Create React App、Next.js、Vue CLI、Angular CLI等
- 用作基础的现有项目或代码库
- 样板项目或脚手架工具
- 要克隆或改编的以前的项目
2. 如果提及了入门模板或现有项目:
- 要求用户通过以下方法之一提供访问权限:
- 指向入门模板文档的链接
- 上传/附加项目文件(对于小项目)
- 共享项目存储库的链接GitHub、GitLab等
- 分析入门/现有项目以了解:
- 预配置的技术栈和版本
- 项目结构和组织模式
- 内置脚本和工具
- 现有的架构模式和约定
- 入门模板施加的任何限制或约束
- 使用此分析来为您的架构决策提供信息并与之保持一致
3. 如果未提及入门模板但这是一个绿地项目:
- 根据技术栈偏好建议合适的入门模板
- 解释其好处(更快的设置、最佳实践、社区支持)
- 让用户决定是否使用
4. 如果用户确认不使用入门模板:
- 从头开始进行架构设计
- 注意所有工具和配置都需要手动设置
在继续进行架构设计之前在此处记录决定。如果没有只需说N/A
elicit: true
- id: changelog
title: 变更日志
type: table
columns: [日期, 版本, 描述, 作者]
instruction: 跟踪文档版本和变更
- id: high-level-architecture
title: 高层架构
instruction: |
本节包含多个小节,它们构成了架构的基础。请一次性呈现所有小节。
elicit: true
sections:
- id: technical-summary
title: 技术摘要
instruction: |
提供一段简短的段落3-5句概述
- 系统的整体架构风格
- 关键组件及其关系
- 主要技术选择
- 使用的核心架构模式
- 回顾PRD目标以及此架构如何支持它们
- id: high-level-overview
title: 高层概览
instruction: |
根据PRD的技术假设部分描述
1. 主要的架构风格(例如,单体、微服务、无服务器、事件驱动)
2. PRD中的存储库结构决策单体仓库/多仓库)
3. PRD中的服务架构决策
4. 概念层面上的主要用户交互流程或数据流
5. 关键架构决策及其理由
- id: project-diagram
title: 高层项目图
type: mermaid
mermaid_type: graph
instruction: |
创建一个Mermaid图来可视化高层架构。考虑
- 系统边界
- 主要组件/服务
- 数据流方向
- 外部集成
- 用户入口点
- id: architectural-patterns
title: 架构和设计模式
instruction: |
列出将指导架构的关键高层模式。对于每个模式:
1. 如果存在多个选项则呈现2-3个可行的选项
2. 提供带有明确理由的您的建议
3. 在最终确定前获得用户确认
4. 这些模式应与PRD的技术假设和项目目标保持一致
要考虑的常见模式:
- 架构风格模式无服务器、事件驱动、微服务、CQRS、六边形
- 代码组织模式(依赖注入、存储库、模块、工厂)
- 数据模式事件溯源、Saga、每个服务一个数据库
- 通信模式REST、GraphQL、消息队列、发布/订阅)
template: "- **{{pattern_name}}:** {{pattern_description}} - _理由:_ {{rationale}}"
examples:
- "**无服务器架构:** 使用AWS Lambda进行计算 - _理由:_ 符合PRD对成本优化和自动扩展的要求"
- "**存储库模式:** 抽象数据访问逻辑 - _理由:_ 实现测试和未来数据库迁移的灵活性"
- "**事件驱动通信:** 使用SNS/SQS进行服务解耦 - _理由:_ 支持异步处理和系统弹性"
- id: tech-stack
title: 技术栈
instruction: |
这是决定性的技术选择部分。与用户合作做出具体选择:
1. 审查PRD技术假设和来自{root}/data/technical-preferences.yaml或附加的technical-preferences的任何偏好
2. 对于每个类别呈现2-3个带有优缺点的可行选项
3. 根据项目需求提出明确的建议
4. 为每个选择获得明确的用户批准
5. 记录确切的版本(避免使用“最新” - 固定特定版本)
6. 此表是唯一的真实来源 - 所有其他文档都必须引用这些选择
要最终确定的关键决策 - 在显示表格之前,确保您了解或询问用户 - 如果他们不确定任何内容,请告知用户您也可以提供带有理由的建议:
- 入门模板(如果有)
- 语言和运行时及其确切版本
- 框架和库/包
- 云提供商和关键服务选择
- 数据库和存储解决方案 - 如果不清楚则根据项目建议sql或nosql或其他类型并根据云提供商提供建议
- 开发工具
渲染表格时,确保用户了解此部分选择的重要性,还应查找与任何内容的差距或分歧,如果不清楚列表中为什么会有某些内容,请要求澄清,并立即征求反馈 - 此声明和选项应在允许用户输入之前全部渲染并提示。
elicit: true
sections:
- id: cloud-infrastructure
title: 云基础设施
template: |
- **提供商:** {{cloud_provider}}
- **关键服务:** {{core_services_list}}
- **部署区域:** {{regions}}
- id: technology-stack-table
title: 技术栈表
type: table
columns: [类别, 技术, 版本, 目的, 理由]
instruction: 用所有相关技术填充技术栈表
examples:
- "| **语言** | TypeScript | 5.3.3 | 主要开发语言 | 强类型,优秀的工具,团队专业知识 |"
- "| **运行时** | Node.js | 20.11.0 | JavaScript运行时 | LTS版本性能稳定生态系统广泛 |"
- "| **框架** | NestJS | 10.3.2 | 后端框架 | 企业级良好的DI符合团队模式 |"
- id: data-models
title: 数据模型
instruction: |
定义核心数据模型/实体:
1. 审查PRD需求并识别关键业务实体
2. 对于每个模型,解释其目的和关系
3. 包括关键属性和数据类型
4. 显示模型之间的关系
5. 与用户讨论设计决策
在转向数据库模式之前创建一个清晰的概念模型。
elicit: true
repeatable: true
sections:
- id: model
title: "{{model_name}}"
template: |
**目的:** {{model_purpose}}
**关键属性:**
- {{attribute_1}}: {{type_1}} - {{description_1}}
- {{attribute_2}}: {{type_2}} - {{description_2}}
**关系:**
- {{relationship_1}}
- {{relationship_2}}
- id: components
title: 组件
instruction: |
基于上述的架构模式、技术栈和数据模型:
1. 识别主要的逻辑组件/服务及其职责
2. 考虑PRD中的存储库结构单体仓库/多仓库)
3. 定义组件之间清晰的边界和接口
4. 对于每个组件,指定:
- 主要职责
- 暴露的关键接口/API
- 对其他组件的依赖
- 基于技术栈选择的技术细节
5. 在有帮助的地方创建组件图
elicit: true
sections:
- id: component-list
repeatable: true
title: "{{component_name}}"
template: |
**职责:** {{component_description}}
**关键接口:**
- {{interface_1}}
- {{interface_2}}
**依赖:** {{dependencies}}
**技术栈:** {{component_tech_details}}
- id: component-diagrams
title: 组件图
type: mermaid
instruction: |
创建Mermaid图来可视化组件关系。选项
- 用于高层视图的C4容器图
- 用于详细内部结构的组件图
- 用于复杂交互的序列图
选择最合适的以求清晰
- id: external-apis
title: 外部API
condition: 项目需要外部API集成
instruction: |
对于每个外部服务集成:
1. 根据PRD需求和组件设计识别所需的API
2. 如果文档URL未知请向用户询问具体信息
3. 记录身份验证方法和安全考虑
4. 列出将使用的特定端点
5. 注意任何速率限制或使用约束
如果不需要外部API请明确说明并跳到下一节。
elicit: true
repeatable: true
sections:
- id: api
title: "{{api_name}} API"
template: |
- **目的:** {{api_purpose}}
- **文档:** {{api_docs_url}}
- **基本URL** {{api_base_url}}
- **身份验证:** {{auth_method}}
- **速率限制:** {{rate_limits}}
**使用的关键端点:**
- `{{method}} {{endpoint_path}}` - {{endpoint_purpose}}
**集成说明:** {{integration_considerations}}
- id: core-workflows
title: 核心工作流
type: mermaid
mermaid_type: sequence
instruction: |
使用序列图说明关键系统工作流:
1. 从PRD中识别关键用户旅程
2. 显示包括外部API在内的组件交互
3. 包括错误处理路径
4. 记录异步操作
5. 根据需要创建高层和详细的图表
专注于阐明架构决策或复杂交互的工作流。
elicit: true
- id: rest-api-spec
title: REST API规范
condition: 项目包含REST API
type: code
language: yaml
instruction: |
如果项目包含REST API
1. 创建一个OpenAPI 3.0规范
2. 包括来自史诗/故事的所有端点
3. 根据数据模型定义请求/响应模式
4. 记录身份验证要求
5. 包括示例请求/响应
使用YAML格式以提高可读性。如果没有REST API则跳过此部分。
elicit: true
template: |
openapi: 3.0.0
info:
title: {{api_title}}
version: {{api_version}}
description: {{api_description}}
servers:
- url: {{server_url}}
description: {{server_description}}
- id: database-schema
title: 数据库模式
instruction: |
将概念数据模型转换为具体的数据库模式:
1. 使用技术栈中选择的数据库类型
2. 使用适当的表示法创建模式定义
3. 包括索引、约束和关系
4. 考虑性能和可扩展性
5. 对于NoSQL显示文档结构
以适合数据库类型的格式呈现模式SQL DDL、JSON模式等
elicit: true
- id: source-tree
title: 源代码树
type: code
language: plaintext
instruction: |
创建一个反映以下内容的项目文件夹结构:
1. 所选的存储库结构(单体仓库/多仓库)
2. 服务架构(单体/微服务/无服务器)
3. 所选的技术栈和语言
4. 上述的组件组织
5. 所选框架的最佳实践
6. 清晰的关注点分离
根据项目需求调整结构。对于单体仓库,显示服务分离。对于无服务器,显示函数组织。包括特定于语言的约定。
elicit: true
examples:
- |
project-root/
├── packages/
│ ├── api/ # 后端API服务
│ ├── web/ # 前端应用程序
│ ├── shared/ # 共享工具/类型
│ └── infrastructure/ # IaC定义
├── scripts/ # 单体仓库管理脚本
└── package.json # 带有工作区的根package.json
- id: infrastructure-deployment
title: 基础设施和部署
instruction: |
定义部署架构和实践:
1. 使用技术栈中选择的IaC工具
2. 选择适合架构的部署策略
3. 定义环境和晋升流程
4. 建立回滚程序
5. 考虑安全性、监控和成本优化
获取用户对部署偏好和CI/CD工具选择的输入。
elicit: true
sections:
- id: infrastructure-as-code
title: 基础设施即代码
template: |
- **工具:** {{iac_tool}} {{version}}
- **位置:** `{{iac_directory}}`
- **方法:** {{iac_approach}}
- id: deployment-strategy
title: 部署策略
template: |
- **策略:** {{deployment_strategy}}
- **CI/CD平台** {{cicd_platform}}
- **管道配置:** `{{pipeline_config_location}}`
- id: environments
title: 环境
repeatable: true
template: "- **{{env_name}}:** {{env_purpose}} - {{env_details}}"
- id: promotion-flow
title: 环境晋升流程
type: code
language: text
template: "{{promotion_flow_diagram}}"
- id: rollback-strategy
title: 回滚策略
template: |
- **主要方法:** {{rollback_method}}
- **触发条件:** {{rollback_triggers}}
- **恢复时间目标:** {{rto}}
- id: error-handling-strategy
title: 错误处理策略
instruction: |
定义全面的错误处理方法:
1. 为技术栈中的语言/框架选择合适的模式
2. 定义日志记录标准和工具
3. 建立错误类别和处理规则
4. 考虑可观察性和调试需求
5. 确保安全(日志中不含敏感数据)
本节指导AI和人类开发人员进行一致的错误处理。
elicit: true
sections:
- id: general-approach
title: 通用方法
template: |
- **错误模型:** {{error_model}}
- **异常层次结构:** {{exception_structure}}
- **错误传播:** {{propagation_rules}}
- id: logging-standards
title: 日志记录标准
template: |
- **库:** {{logging_library}} {{version}}
- **格式:** {{log_format}}
- **级别:** {{log_levels_definition}}
- **所需上下文:**
- 关联ID{{correlation_id_format}}
- 服务上下文:{{service_context}}
- 用户上下文:{{user_context_rules}}
- id: error-patterns
title: 错误处理模式
sections:
- id: external-api-errors
title: 外部API错误
template: |
- **重试策略:** {{retry_strategy}}
- **断路器:** {{circuit_breaker_config}}
- **超时配置:** {{timeout_settings}}
- **错误转换:** {{error_mapping_rules}}
- id: business-logic-errors
title: 业务逻辑错误
template: |
- **自定义异常:** {{business_exception_types}}
- **面向用户的错误:** {{user_error_format}}
- **错误代码:** {{error_code_system}}
- id: data-consistency
title: 数据一致性
template: |
- **事务策略:** {{transaction_approach}}
- **补偿逻辑:** {{compensation_patterns}}
- **幂等性:** {{idempotency_approach}}
- id: coding-standards
title: 编码标准
instruction: |
这些标准对AI代理是强制性的。与用户合作仅定义防止不良代码所需的关键规则。解释说
1. 本节直接控制AI开发人员的行为
2. 保持最小化 - 假设AI了解通用的最佳实践
3. 专注于特定于项目的约定和陷阱
4. 过度详细的标准会使上下文膨胀并减慢开发速度
5. 标准将被提取到单独的文件中供开发代理使用
对于每个标准,都要获得用户的明确确认,确认其是必要的。
elicit: true
sections:
- id: core-standards
title: 核心标准
template: |
- **语言和运行时:** {{languages_and_versions}}
- **样式和Linting** {{linter_config}}
- **测试组织:** {{test_file_convention}}
- id: naming-conventions
title: 命名约定
type: table
columns: [元素, 约定, 示例]
instruction: 仅在偏离语言默认值时包括
- id: critical-rules
title: 关键规则
instruction: |
仅列出AI可能违反的规则或特定于项目的要求。示例
- “切勿在生产代码中使用console.log - 使用logger”
- “所有API响应都必须使用ApiResponse包装器类型”
- “数据库查询必须使用存储库模式切勿直接使用ORM”
避免使用“使用SOLID原则”或“编写干净的代码”等显而易见的规则
repeatable: true
template: "- **{{rule_name}}:** {{rule_description}}"
- id: language-specifics
title: 特定于语言的指南
condition: 需要关键的特定于语言的规则
instruction: 仅在对于防止AI错误至关重要时添加。大多数团队不需要此部分。
sections:
- id: language-rules
title: "{{language_name}} specifics"
repeatable: true
template: "- **{{rule_topic}}:** {{rule_detail}}"
- id: test-strategy
title: 测试策略和标准
instruction: |
与用户合作定义全面的测试策略:
1. 使用技术栈中的测试框架
2. 决定TDD与测试后方法
3. 定义测试组织和命名
4. 建立覆盖目标
5. 确定集成测试基础设施
6. 规划测试数据和外部依赖
注意基本信息在编码标准中供开发代理使用。此详细部分供QA代理和团队参考。
elicit: true
sections:
- id: testing-philosophy
title: 测试理念
template: |
- **方法:** {{test_approach}}
- **覆盖目标:** {{coverage_targets}}
- **测试金字塔:** {{test_distribution}}
- id: test-types
title: 测试类型和组织
sections:
- id: unit-tests
title: 单元测试
template: |
- **框架:** {{unit_test_framework}} {{version}}
- **文件约定:** {{unit_test_naming}}
- **位置:** {{unit_test_location}}
- **模拟库:** {{mocking_library}}
- **覆盖要求:** {{unit_coverage}}
**AI代理要求**
- 为所有公共方法生成测试
- 覆盖边缘情况和错误条件
- 遵循AAA模式安排、行动、断言
- 模拟所有外部依赖
- id: integration-tests
title: 集成测试
template: |
- **范围:** {{integration_scope}}
- **位置:** {{integration_test_location}}
- **测试基础设施:**
- **{{dependency_name}}:** {{test_approach}} ({{test_tool}})
examples:
- "**数据库:** 单元测试使用内存H2集成测试使用Testcontainers PostgreSQL"
- "**消息队列:** 测试使用嵌入式Kafka"
- "**外部API** 使用WireMock进行桩模拟"
- id: e2e-tests
title: 端到端测试
template: |
- **框架:** {{e2e_framework}} {{version}}
- **范围:** {{e2e_scope}}
- **环境:** {{e2e_environment}}
- **测试数据:** {{e2e_data_strategy}}
- id: test-data-management
title: 测试数据管理
template: |
- **策略:** {{test_data_approach}}
- **固定数据:** {{fixture_location}}
- **工厂:** {{factory_pattern}}
- **清理:** {{cleanup_strategy}}
- id: continuous-testing
title: 持续测试
template: |
- **CI集成** {{ci_test_stages}}
- **性能测试:** {{perf_test_approach}}
- **安全测试:** {{security_test_approach}}
- id: security
title: 安全性
instruction: |
为AI和人类开发人员定义强制性安全要求
1. 专注于特定于实现的规则
2. 引用技术栈中的安全工具
3. 为常见场景定义清晰的模式
4. 这些规则直接影响代码生成
5. 与用户合作,确保完整性而无冗余
elicit: true
sections:
- id: input-validation
title: 输入验证
template: |
- **验证库:** {{validation_library}}
- **验证位置:** {{where_to_validate}}
- **所需规则:**
- 所有外部输入都必须经过验证
- 在处理前在API边界进行验证
- 白名单方法优于黑名单方法
- id: auth-authorization
title: 身份验证和授权
template: |
- **认证方法:** {{auth_implementation}}
- **会话管理:** {{session_approach}}
- **所需模式:**
- {{auth_pattern_1}}
- {{auth_pattern_2}}
- id: secrets-management
title: 密钥管理
template: |
- **开发:** {{dev_secrets_approach}}
- **生产:** {{prod_secrets_service}}
- **代码要求:**
- 切勿硬编码密钥
- 仅通过配置服务访问
- 日志或错误消息中不含密钥
- id: api-security
title: API安全
template: |
- **速率限制:** {{rate_limit_implementation}}
- **CORS策略** {{cors_configuration}}
- **安全头:** {{required_headers}}
- **HTTPS强制** {{https_approach}}
- id: data-protection
title: 数据保护
template: |
- **静态加密:** {{encryption_at_rest}}
- **传输中加密:** {{encryption_in_transit}}
- **PII处理** {{pii_rules}}
- **日志记录限制:** {{what_not_to_log}}
- id: dependency-security
title: 依赖项安全
template: |
- **扫描工具:** {{dependency_scanner}}
- **更新策略:** {{update_frequency}}
- **批准流程:** {{new_dep_process}}
- id: security-testing
title: 安全测试
template: |
- **SAST工具** {{static_analysis}}
- **DAST工具** {{dynamic_analysis}}
- **渗透测试:** {{pentest_schedule}}
- id: checklist-results
title: 清单结果报告
instruction: 在运行清单之前提议输出完整的架构文档。一旦用户确认执行architect-checklist并在此处填充结果。
- id: next-steps
title: 下一步
instruction: |
完成架构后:
1. 如果项目有UI组件
- 使用“前端架构模式”
- 提供本文档作为输入
2. 对于所有项目:
- 与产品负责人审查
- 与开发代理一起开始故事实施
- 与DevOps代理一起设置基础设施
3. 如果需要,为下一个代理包括具体的提示
sections:
- id: architect-prompt
title: 架构师提示
condition: 项目有UI组件
instruction: |
为前端架构创建创建一个简短的提示以交接给架构师。包括:
- 对此架构文档的引用
- 来自PRD的关键UI要求
- 此处做出的任何特定于前端的决定
- 对详细前端架构的要求