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

825 lines
30 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: fullstack-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和docs/front-end-spec.md。如果您需要但找不到任何文档请向用户索取。此模板创建一个统一的架构涵盖后端和前端问题以指导AI驱动的全栈开发。
elicit: true
content: |
本文档概述了{{project_name}}的完整全栈架构包括后端系统、前端实现及其集成。它作为AI驱动开发的唯一真实来源确保整个技术栈的一致性。
这种统一的方法结合了传统上独立的后端和前端架构文档,为现代全栈应用程序简化了开发过程,因为这些问题越来越交织在一起。
sections:
- id: starter-template
title: 入门模板或现有项目
instruction: |
在继续进行架构设计之前,请检查项目是否基于任何入门模板或现有代码库:
1. 审查PRD和其他文档中是否提及
- 全栈入门模板例如T3 Stack、MEAN/MERN入门模板、Django + React模板
- Monorepo模板例如Nx、Turborepo入门模板
- 特定于平台的入门模板例如Vercel模板、AWS Amplify入门模板
- 正在扩展或克隆的现有项目
2. 如果提及了入门模板或现有项目:
- 要求用户提供访问权限(链接、存储库或文件)
- 分析以了解预配置的选择和约束
- 注意任何已经做出的架构决策
- 确定哪些可以修改,哪些必须保留
3. 如果未提及入门模板但这是绿地项目:
- 根据技术偏好建议合适的全栈入门模板
- 考虑特定于平台的选项Vercel、AWS等
- 让用户决定是否使用
4. 记录决定及其施加的任何约束
如果没有则说明“N/A - 绿地项目”
- id: changelog
title: 变更日志
type: table
columns: [日期, 版本, 描述, 作者]
instruction: 跟踪文档版本和变更
- id: high-level-architecture
title: 高层架构
instruction: 本节包含多个建立基础的小节。一次性呈现所有小节,然后征求对整个部分的反馈。
elicit: true
sections:
- id: technical-summary
title: 技术摘要
instruction: |
提供全面的概述4-6句涵盖
- 整体架构风格和部署方法
- 前端框架和后端技术选择
- 前端和后端之间的关键集成点
- 基础设施平台和服务
- 此架构如何实现PRD目标
- id: platform-infrastructure
title: 平台和基础设施选择
instruction: |
根据PRD要求和技术假设提出平台建议
1. 考虑常见模式(不是详尽的列表,根据自己的最佳判断,并根据需要搜索网络以了解新兴趋势):
- **Vercel + Supabase**用于使用Next.js进行快速开发内置身份验证/存储
- **AWS全栈**用于企业级规模使用Lambda、API网关、S3、Cognito
- **Azure**:用于.NET生态系统或企业Microsoft环境
- **Google Cloud**用于重度ML/AI应用程序或Google生态系统集成
2. 提出2-3个带有明确优缺点的可行选项
3. 提出带有理由的建议
4. 获得用户的明确确认
记录选择和将要使用的关键服务。
template: |
**平台:** {{selected_platform}}
**关键服务:** {{core_services_list}}
**部署主机和区域:** {{regions}}
- id: repository-structure
title: 存储库结构
instruction: |
根据PRD要求和平台选择定义存储库方法如果不确定请向用户解释您的理由或提问
1. 对于现代全栈应用程序通常首选monorepo
2. 考虑工具Nx、Turborepo、Lerna、npm工作区
3. 定义包/应用程序边界
4. 规划前端和后端之间的共享代码
template: |
**结构:** {{repo_structure_choice}}
**Monorepo工具** {{monorepo_tool_if_applicable}}
**包组织:** {{package_strategy}}
- id: architecture-diagram
title: 高层架构图
type: mermaid
mermaid_type: graph
instruction: |
创建一个Mermaid图显示完整的系统架构包括
- 用户入口点Web、移动
- 前端应用程序部署
- API层REST/GraphQL
- 后端服务
- 数据库和存储
- 外部集成
- CDN和缓存层
使用适当的图表类型以求清晰。
- id: architectural-patterns
title: 架构模式
instruction: |
列出将指导前端和后端开发的模式。包括以下模式:
- 整体架构例如Jamstack、无服务器、微服务
- 前端模式(例如,基于组件、状态管理)
- 后端模式例如存储库、CQRS、事件驱动
- 集成模式例如BFF、API网关
对于每个模式,提供建议和理由。
repeatable: true
template: "- **{{pattern_name}}:** {{pattern_description}} - _理由:_ {{rationale}}"
examples:
- "**Jamstack架构** 静态站点生成与无服务器API - _理由:_ 内容密集型应用程序的最佳性能和可扩展性"
- "**基于组件的UI** 使用TypeScript的可重用React组件 - _理由:_ 大型代码库的可维护性和类型安全"
- "**存储库模式:** 抽象数据访问逻辑 - _理由:_ 实现测试和未来数据库迁移的灵活性"
- "**API网关模式** 所有API调用的单一入口点 - _理由:_ 集中式身份验证、速率限制和监控"
- id: tech-stack
title: 技术栈
instruction: |
这是整个项目的决定性技术选择。与用户合作最终确定所有选择。此表是唯一的真实来源 - 所有开发都必须使用这些确切的版本。
要涵盖的关键领域:
- 前端和后端语言/框架
- 数据库和缓存
- 身份验证和授权
- API方法
- 前端和后端的测试工具
- 构建和部署工具
- 监控和日志记录
渲染后,立即征求反馈。
elicit: true
sections:
- id: tech-stack-table
title: 技术栈表
type: table
columns: [类别, 技术, 版本, 目的, 理由]
rows:
- ["前端语言", "{{fe_language}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- [
"前端框架",
"{{fe_framework}}",
"{{version}}",
"{{purpose}}",
"{{why_chosen}}",
]
- [
"UI组件库",
"{{ui_library}}",
"{{version}}",
"{{purpose}}",
"{{why_chosen}}",
]
- ["状态管理", "{{state_mgmt}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["后端语言", "{{be_language}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- [
"后端框架",
"{{be_framework}}",
"{{version}}",
"{{purpose}}",
"{{why_chosen}}",
]
- ["API风格", "{{api_style}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["数据库", "{{database}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["缓存", "{{cache}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["文件存储", "{{storage}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["身份验证", "{{auth}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["前端测试", "{{fe_test}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["后端测试", "{{be_test}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["端到端测试", "{{e2e_test}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["构建工具", "{{build_tool}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["打包工具", "{{bundler}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["IaC工具", "{{iac_tool}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["CI/CD", "{{cicd}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["监控", "{{monitoring}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["日志记录", "{{logging}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- ["CSS框架", "{{css_framework}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
- id: data-models
title: 数据模型
instruction: |
定义将在前端和后端之间共享的核心数据模型/实体:
1. 审查PRD需求并识别关键业务实体
2. 对于每个模型,解释其目的和关系
3. 包括关键属性和数据类型
4. 显示模型之间的关系
5. 创建可以共享的TypeScript接口
6. 与用户讨论设计决策
在转向数据库模式之前创建一个清晰的概念模型。
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}}
sections:
- id: typescript-interface
title: TypeScript接口
type: code
language: typescript
template: "{{model_interface}}"
- id: relationships
title: 关系
type: bullet-list
template: "- {{relationship}}"
- id: api-spec
title: API规范
instruction: |
根据技术栈中选择的API风格
1. 如果是REST API则创建OpenAPI 3.0规范
2. 如果是GraphQL则提供GraphQL模式
3. 如果是tRPC则显示路由器定义
4. 包括来自史诗/故事的所有端点
5. 根据数据模型定义请求/响应模式
6. 记录身份验证要求
7. 包括示例请求/响应
使用适合所选API风格的格式。如果没有API例如静态站点则跳过此部分。
elicit: true
sections:
- id: rest-api
title: REST API规范
condition: API风格是REST
type: code
language: yaml
template: |
openapi: 3.0.0
info:
title: {{api_title}}
version: {{api_version}}
description: {{api_description}}
servers:
- url: {{server_url}}
description: {{server_description}}
- id: graphql-api
title: GraphQL模式
condition: API风格是GraphQL
type: code
language: graphql
template: "{{graphql_schema}}"
- id: trpc-api
title: tRPC路由器定义
condition: API风格是tRPC
type: code
language: typescript
template: "{{trpc_routers}}"
- id: components
title: 组件
instruction: |
基于上述的架构模式、技术栈和数据模型:
1. 识别整个全栈的主要逻辑组件/服务
2. 考虑前端和后端组件
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. 记录异步操作
6. 根据需要创建高层和详细的图表
专注于阐明架构决策或复杂交互的工作流。
elicit: true
- id: database-schema
title: 数据库模式
instruction: |
将概念数据模型转换为具体的数据库模式:
1. 使用技术栈中选择的数据库类型
2. 使用适当的表示法创建模式定义
3. 包括索引、约束和关系
4. 考虑性能和可扩展性
5. 对于NoSQL显示文档结构
以适合数据库类型的格式呈现模式SQL DDL、JSON模式等
elicit: true
- id: frontend-architecture
title: 前端架构
instruction: 定义特定于前端的架构细节。在每个小节之后,注意用户是否希望在继续之前进行完善。
elicit: true
sections:
- id: component-architecture
title: 组件架构
instruction: 根据所选框架定义组件组织和模式。
sections:
- id: component-organization
title: 组件组织
type: code
language: text
template: "{{component_structure}}"
- id: component-template
title: 组件模板
type: code
language: typescript
template: "{{component_template}}"
- id: state-management
title: 状态管理架构
instruction: 根据所选解决方案详细说明状态管理方法。
sections:
- id: state-structure
title: 状态结构
type: code
language: typescript
template: "{{state_structure}}"
- id: state-patterns
title: 状态管理模式
type: bullet-list
template: "- {{pattern}}"
- id: routing-architecture
title: 路由架构
instruction: 根据框架选择定义路由结构。
sections:
- id: route-organization
title: 路由组织
type: code
language: text
template: "{{route_structure}}"
- id: protected-routes
title: 受保护的路由模式
type: code
language: typescript
template: "{{protected_route_example}}"
- id: frontend-services
title: 前端服务层
instruction: 定义前端如何与后端通信。
sections:
- id: api-client-setup
title: API客户端设置
type: code
language: typescript
template: "{{api_client_setup}}"
- id: service-example
title: 服务示例
type: code
language: typescript
template: "{{service_example}}"
- id: backend-architecture
title: 后端架构
instruction: 定义特定于后端的架构细节。考虑无服务器与传统服务器方法。
elicit: true
sections:
- id: service-architecture
title: 服务架构
instruction: 根据平台选择定义服务组织。
sections:
- id: serverless-architecture
condition: 选择无服务器架构
sections:
- id: function-organization
title: 函数组织
type: code
language: text
template: "{{function_structure}}"
- id: function-template
title: 函数模板
type: code
language: typescript
template: "{{function_template}}"
- id: traditional-server
condition: 选择传统服务器架构
sections:
- id: controller-organization
title: 控制器/路由组织
type: code
language: text
template: "{{controller_structure}}"
- id: controller-template
title: 控制器模板
type: code
language: typescript
template: "{{controller_template}}"
- id: database-architecture
title: 数据库架构
instruction: 定义数据库模式和访问模式。
sections:
- id: schema-design
title: 模式设计
type: code
language: sql
template: "{{database_schema}}"
- id: data-access-layer
title: 数据访问层
type: code
language: typescript
template: "{{repository_pattern}}"
- id: auth-architecture
title: 身份验证和授权
instruction: 定义身份验证实现细节。
sections:
- id: auth-flow
title: 身份验证流程
type: mermaid
mermaid_type: sequence
template: "{{auth_flow_diagram}}"
- id: auth-middleware
title: 中间件/守卫
type: code
language: typescript
template: "{{auth_middleware}}"
- id: unified-project-structure
title: 统一的项目结构
instruction: 创建一个容纳前端和后端的monorepo结构。根据所选的工具和框架进行调整。
elicit: true
type: code
language: plaintext
examples:
- |
{{project-name}}/
├── .github/ # CI/CD工作流
│ └── workflows/
│ ├── ci.yaml
│ └── deploy.yaml
├── apps/ # 应用程序包
│ ├── web/ # 前端应用程序
│ │ ├── src/
│ │ │ ├── components/ # UI组件
│ │ │ ├── pages/ # 页面组件/路由
│ │ │ ├── hooks/ # 自定义React钩子
│ │ │ ├── services/ # API客户端服务
│ │ │ ├── stores/ # 状态管理
│ │ │ ├── styles/ # 全局样式/主题
│ │ │ └── utils/ # 前端实用程序
│ │ ├── public/ # 静态资产
│ │ ├── tests/ # 前端测试
│ │ └── package.json
│ └── api/ # 后端应用程序
│ ├── src/
│ │ ├── routes/ # API路由/控制器
│ │ ├── services/ # 业务逻辑
│ │ ├── models/ # 数据模型
│ │ ├── middleware/ # Express/API中间件
│ │ ├── utils/ # 后端实用程序
│ │ └── {{serverless_or_server_entry}}
│ ├── tests/ # 后端测试
│ └── package.json
├── packages/ # 共享包
│ ├── shared/ # 共享类型/实用程序
│ │ ├── src/
│ │ │ ├── types/ # TypeScript接口
│ │ │ ├── constants/ # 共享常量
│ │ │ └── utils/ # 共享实用程序
│ │ └── package.json
│ ├── ui/ # 共享UI组件
│ │ ├── src/
│ │ └── package.json
│ └── config/ # 共享配置
│ ├── eslint/
│ ├── typescript/
│ └── jest/
├── infrastructure/ # IaC定义
│ └── {{iac_structure}}
├── scripts/ # 构建/部署脚本
├── docs/ # 文档
│ ├── prd.md
│ ├── front-end-spec.md
│ └── fullstack-architecture.md
├── .env.example # 环境模板
├── package.json # 根package.json
├── {{monorepo_config}} # Monorepo配置
└── README.md
- id: development-workflow
title: 开发工作流
instruction: 定义全栈应用程序的开发设置和工作流。
elicit: true
sections:
- id: local-setup
title: 本地开发设置
sections:
- id: prerequisites
title: 先决条件
type: code
language: bash
template: "{{prerequisites_commands}}"
- id: initial-setup
title: 初始设置
type: code
language: bash
template: "{{setup_commands}}"
- id: dev-commands
title: 开发命令
type: code
language: bash
template: |
# 启动所有服务
{{start_all_command}}
# 仅启动前端
{{start_frontend_command}}
# 仅启动后端
{{start_backend_command}}
# 运行测试
{{test_commands}}
- id: environment-config
title: 环境配置
sections:
- id: env-vars
title: 所需的环境变量
type: code
language: bash
template: |
# 前端 (.env.local)
{{frontend_env_vars}}
# 后端 (.env)
{{backend_env_vars}}
# 共享
{{shared_env_vars}}
- id: deployment-architecture
title: 部署架构
instruction: 根据平台选择定义部署策略。
elicit: true
sections:
- id: deployment-strategy
title: 部署策略
template: |
**前端部署:**
- **平台:** {{frontend_deploy_platform}}
- **构建命令:** {{frontend_build_command}}
- **输出目录:** {{frontend_output_dir}}
- **CDN/Edge** {{cdn_strategy}}
**后端部署:**
- **平台:** {{backend_deploy_platform}}
- **构建命令:** {{backend_build_command}}
- **部署方法:** {{deployment_method}}
- id: cicd-pipeline
title: CI/CD管道
type: code
language: yaml
template: "{{cicd_pipeline_config}}"
- id: environments
title: 环境
type: table
columns: [环境, 前端URL, 后端URL, 目的]
rows:
- ["开发", "{{dev_fe_url}}", "{{dev_be_url}}", "本地开发"]
- ["预发", "{{staging_fe_url}}", "{{staging_be_url}}", "生产前测试"]
- ["生产", "{{prod_fe_url}}", "{{prod_be_url}}", "线上环境"]
- id: security-performance
title: 安全和性能
instruction: 定义全栈应用程序的安全和性能考虑。
elicit: true
sections:
- id: security-requirements
title: 安全要求
template: |
**前端安全:**
- CSP头{{csp_policy}}
- XSS预防{{xss_strategy}}
- 安全存储:{{storage_strategy}}
**后端安全:**
- 输入验证:{{validation_approach}}
- 速率限制:{{rate_limit_config}}
- CORS策略{{cors_config}}
**身份验证安全:**
- 令牌存储:{{token_strategy}}
- 会话管理:{{session_approach}}
- 密码策略:{{password_requirements}}
- id: performance-optimization
title: 性能优化
template: |
**前端性能:**
- 打包大小目标:{{bundle_size}}
- 加载策略:{{loading_approach}}
- 缓存策略:{{fe_cache_strategy}}
**后端性能:**
- 响应时间目标:{{response_target}}
- 数据库优化:{{db_optimization}}
- 缓存策略:{{be_cache_strategy}}
- id: testing-strategy
title: 测试策略
instruction: 定义全栈应用程序的综合测试方法。
elicit: true
sections:
- id: testing-pyramid
title: 测试金字塔
type: code
language: text
template: |
端到端测试
/ \
集成测试
/ \
前端单元 后端单元
- id: test-organization
title: 测试组织
sections:
- id: frontend-tests
title: 前端测试
type: code
language: text
template: "{{frontend_test_structure}}"
- id: backend-tests
title: 后端测试
type: code
language: text
template: "{{backend_test_structure}}"
- id: e2e-tests
title: 端到端测试
type: code
language: text
template: "{{e2e_test_structure}}"
- id: test-examples
title: 测试示例
sections:
- id: frontend-test
title: 前端组件测试
type: code
language: typescript
template: "{{frontend_test_example}}"
- id: backend-test
title: 后端API测试
type: code
language: typescript
template: "{{backend_test_example}}"
- id: e2e-test
title: 端到端测试
type: code
language: typescript
template: "{{e2e_test_example}}"
- id: coding-standards
title: 编码标准
instruction: 为AI代理定义最小但关键的标准。仅关注防止常见错误的项目特定规则。这些将由开发代理使用。
elicit: true
sections:
- id: critical-rules
title: 关键全栈规则
repeatable: true
template: "- **{{rule_name}}:** {{rule_description}}"
examples:
- "**类型共享:** 始终在packages/shared中定义类型并从那里导入"
- "**API调用** 切勿直接进行HTTP调用 - 使用服务层"
- "**环境变量:** 仅通过配置对象访问切勿直接访问process.env"
- "**错误处理:** 所有API路由都必须使用标准错误处理程序"
- "**状态更新:** 切勿直接改变状态 - 使用适当的状态管理模式"
- id: naming-conventions
title: 命名约定
type: table
columns: [元素, 前端, 后端, 示例]
rows:
- ["组件", "PascalCase", "-", "`UserProfile.tsx`"]
- ["钩子", "camelCase with 'use'", "-", "`useAuth.ts`"]
- ["API路由", "-", "kebab-case", "`/api/user-profile`"]
- ["数据库表", "-", "snake_case", "`user_profiles`"]
- id: error-handling
title: 错误处理策略
instruction: 定义跨前端和后端的统一错误处理。
elicit: true
sections:
- id: error-flow
title: 错误流程
type: mermaid
mermaid_type: sequence
template: "{{error_flow_diagram}}"
- id: error-format
title: 错误响应格式
type: code
language: typescript
template: |
interface ApiError {
error: {
code: string;
message: string;
details?: Record<string, any>;
timestamp: string;
requestId: string;
};
}
- id: frontend-error-handling
title: 前端错误处理
type: code
language: typescript
template: "{{frontend_error_handler}}"
- id: backend-error-handling
title: 后端错误处理
type: code
language: typescript
template: "{{backend_error_handler}}"
- id: monitoring
title: 监控和可观察性
instruction: 定义全栈应用程序的监控策略。
elicit: true
sections:
- id: monitoring-stack
title: 监控栈
template: |
- **前端监控:** {{frontend_monitoring}}
- **后端监控:** {{backend_monitoring}}
- **错误跟踪:** {{error_tracking}}
- **性能监控:** {{perf_monitoring}}
- id: key-metrics
title: 关键指标
template: |
**前端指标:**
- 核心Web指标
- JavaScript错误
- API响应时间
- 用户交互
**后端指标:**
- 请求率
- 错误率
- 响应时间
- 数据库查询性能
- id: checklist-results
title: 清单结果报告
instruction: 在运行清单之前提议输出完整的架构文档。一旦用户确认执行architect-checklist并在此处填充结果。