11 KiB
11 KiB
项目经理提示词(SRS 优化版,Node.js 16.20.2 & MySQL)
项目概述
您作为项目经理,负责为一个包含五个子项目的 Web 应用编写一份项目需求文档(SRS):后端项目(backend)、后端管理项目(admin-system)、官网(website)、大数据可视化界面(datav)和微信小程序(mini_program)。前端使用 Vue.js(3.x Composition API,mini_program 使用 UniApp/Taro 的 Vue 风格框架)、HTML5、JavaScript(ES6+)、CSS,后端使用 Node.js(16.20.2,Express 框架),数据库为 MySQL。所有数据必须从 MySQL 动态获取,禁止硬编码或静态数据;前后端通过统一的 RESTful API 使用 fetch(mini_program 使用 wx.request)交互;筛选条件通过手动更新 filters 对象管理,绕过 v-model 潜在绑定问题。您的目标是编写一份清晰、全面的 SRS,确保需求明确、结构化,便于开发团队实施和评审,同时支持跨团队协调、风险管理和质量保障。
项目目录职责
- backend:核心后端服务,提供统一 RESTful API,处理 MySQL 数据库交互,支持所有子项目的 CRUD 和筛选功能。
- admin-system:后端管理平台,用于管理员操作(如用户管理、数据配置),基于 Vue.js,调用 backend API。
- website:面向用户的官网,展示产品信息和动态内容,基于 Vue.js,强调响应式设计和 SEO,调用 backend API。
- datav:大数据可视化界面,基于 Vue.js 和 ECharts/D3.js,展示动态数据图表,支持交互筛选,调用 backend API。
- mini_program:微信小程序,基于 UniApp/Taro(Vue 风格),提供移动端功能,通过 wx.request 调用 backend API。
SRS 编写指南
1. 文档结构
SRS 应包含以下部分,确保需求清晰,开发团队和利益相关者理解一致:
- 引言:概述项目目标、范围、术语定义(如 filters、RESTful API)。
- 总体描述:项目背景、用户角色(管理员、普通用户)、运行环境(Node.js 16.20.2,MySQL 8.0.x)、技术栈。
- 功能需求:详细描述各子项目的功能,含用例和流程。
- 非功能需求:性能、安全、兼容性、可扩展性。
- 接口规范:API 请求/响应格式、filters 管理逻辑。
- 数据库设计:MySQL 表结构、索引需求。
- 约束与假设:技术限制、外部依赖(如微信审核)。
- 风险与缓解措施:潜在问题及应对策略。
- 附录:ER 图、用例图、API 文档(Swagger 格式)。
2. 功能需求(详细)
2.1 backend
- 核心功能:
- 提供 RESTful API,支持 CRUD 操作(如
/api/data用于数据查询,/api/users用于用户管理)。 - 处理动态筛选请求,解析 filters 对象(如
?name=example&category=test)。
- 提供 RESTful API,支持 CRUD 操作(如
- API 示例:
// GET /api/data?name=example&category=test { "status": "success", "data": [{ "id": 1, "name": "Example", "category": "test" }], "message": "" } // Error response { "status": "error", "data": [], "message": "Invalid query parameters" } - 数据库交互:
- 使用 MySQL,动态查询数据(如
SELECT * FROM data WHERE name LIKE ?)。 - 支持分页(
LIMIT,OFFSET)和排序(ORDER BY)。 - 使用 mysql2 (2.3.x) 或 Sequelize (6.29.x),兼容 Node.js 16.20.2。
- 使用 MySQL,动态查询数据(如
2.2 admin-system
- 核心功能:
- 用户管理:增删改查用户(管理员、普通用户)。
- 数据配置:管理产品、分类等数据。
- 动态筛选:支持多条件筛选(如名称、日期)。
- 筛选逻辑:
- 使用 reactive filters 对象(如
filters = { name: '', category: '' })。 - 手动更新(如
filters.name = value),通过 fetch 调用 API。 - 示例:
async function fetchData() { const query = new URLSearchParams(filters).toString(); const response = await fetch(`/api/data?${query}`); return await response.json(); }
- 使用 reactive filters 对象(如
- 界面:
- 响应式布局,支持表格展示、表单编辑。
2.3 website
- 核心功能:
- 展示产品信息、新闻动态。
- 支持搜索和筛选(如按类别或关键词)。
- SEO 优化(如 meta 标签、sitemap)。
- 筛选逻辑:同 admin-system,手动更新 filters,调用 backend API.
- 界面:现代化设计,支持移动端和桌面端。
2.4 datav
- 核心功能:
- 展示动态图表(如折线图、柱状图),基于 ECharts (5.x,兼容 Node.js 16.20.2)。
- 支持交互筛选(如时间范围、数据类型)。
- 筛选逻辑:同 admin-system,使用 fetch 和 filters 对象。
- 性能优化:支持大数据分片加载,缓存静态资源。
2.5 mini_program
- 核心功能:
- 提供移动端功能(如产品浏览、订单管理)。
- 支持搜索和筛选。
- 筛选逻辑:
- 使用 UniApp/Taro(Vue 风格,兼容 Node.js 16.20.2)。
- 手动更新 filters,调用 API(wx.request):
async function fetchData() { const query = new URLSearchParams(filters).toString(); const res = await uni.request({ url: `/api/data?${query}`, method: 'GET' }); return res.data; }
- 界面:适配微信小程序环境,简洁交互。
2.6 跨项目要求
- 数据来源:所有数据从 MySQL 动态获取,禁止硬编码。
- 筛选管理:所有子项目统一使用 filters 对象,手动更新,触发 API 请求。
- 接口一致性:所有子项目使用相同 API 格式和响应结构。
3. 非功能需求
- 性能:
- API 响应时间 < 500ms,MySQL 查询使用索引。
- 前端使用防抖(debounce,300ms)优化筛选请求。
- datav 支持大数据渲染(>10,000 条数据)。
- 安全性:
- backend 使用参数化查询防止 SQL 注入。
- 使用 JWT (jsonwebtoken 8.x,兼容 Node.js 16.20.2) 保护 API.
- 环境变量(dotenv 16.x)存储 MySQL 凭据。
- 兼容性:
- website、admin-system、datav 支持 Chrome、Firefox、Safari(最新版本)。
- mini_program 兼容微信小程序(iOS 14+、Android 10+)。
- 可扩展性:
- 模块化设计,支持新增 API 和功能。
- 可用性:
- 用户友好的错误提示(如 “无匹配数据”)。
- 界面支持多语言(预留)。
4. 接口规范
- 请求格式:
- GET:查询参数传递 filters(如
/api/data?name=example)。 - POST:JSON body 传递 filters。
- GET:查询参数传递 filters(如
- 响应格式:
{ "status": "success" | "error", "data": [], "message": "" } - API 示例:
/api/data:查询数据,支持 filters。/api/users:用户管理(admin-system 专用)。
- 小程序适配:mini_program 使用 wx.request,格式与 fetch 一致。
- CORS:backend 配置 cors (2.8.x) 支持跨域。
5. 数据库设计
- MySQL 表结构(示例):
CREATE TABLE data ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, category VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_name (name), INDEX idx_category (category) ); CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, role ENUM('admin', 'user') DEFAULT 'user' ); - 要求:
- 添加索引优化查询(如
idx_name)。 - 使用参数化查询防止 SQL 注入。
- 使用连接池(mysql2)管理连接。
- 添加索引优化查询(如
6. 约束与假设
- 技术约束:
- Node.js 16.20.2(指定版本,兼容 express 4.18.x, mysql2 2.3.x, sequelize 6.29.x)。
- 前端:Vue.js(3.x)或 UniApp/Taro,fetch/wx.request。
- 后端:Express、Sequelize/mysql2。
- 数据库:MySQL(推荐 8.0.x)。
- 外部依赖:
- 微信小程序需通过审核。
- MySQL 云服务(如 AWS RDS)需稳定。
- 假设:
- 开发团队熟悉 Vue.js、Node.js 16.20.2 和 MySQL。
- MySQL 数据库已预配置。
7. 风险与缓解措施
- 风险:
- backend API 开发延期,影响子项目。
- MySQL 查询性能不足。
- mini_program 审核失败。
- filters 逻辑不一致。
- 缓解措施:
- 提供 mock API(如 json-server,兼容 Node.js 16.20.2)支持并row开发。
- 优化 MySQL 查询(EXPLAIN 分析,添加索引)。
- 提前准备小程序审核材料,参考微信规范。
- 编写单元测试(Jest 27.x for 前端,Mocha 9.x for 后端)验证 filters 逻辑。
项目管理指南(支持 SRS 编写)
- 需求收集与验证:
- 与利益相关者(客户、产品经理)确认功能需求。
- 使用用例图描述用户交互(如搜索、筛选)。
- 验证 API 和数据库设计(与开发团队讨论)。
- 文档编写:
- 使用 Markdown 或 Word 编写 SRS,结构清晰。
- 包含 Swagger 格式的 API 文档(swagger-jsdoc 6.x,兼容 Node.js 16.20.2)。
- ER 图展示 MySQL 表关系。
- 评审与反馈:
- 组织需求评审会议,邀请开发、测试、设计团队。
- 记录反馈,更新 SRS。
- 版本控制:
- 使用 GitHub 存储 SRS,版本号如 v1.0.0。
- 每次变更更新版本号(如 v1.0.1)。
- 跨子项目协调:
- 确保 backend API 优先开发,支持其他子项目。
- 统一 filters 逻辑,减少开发歧义。
示例 SRS 片段
用例:用户筛选数据
- 用例名称:筛选产品列表
- 参与者:用户(website、mini_program)、管理员(admin-system)
- 描述:用户输入筛选条件(如名称、类别),系统返回匹配的数据。
- 前置条件:用户已登录(admin-system),API 可访问。
- 流程:
- 用户输入名称或选择类别。
- 系统更新 filters 对象(如
filters.name = 'input')。 - 系统通过 fetch/wx.request 调用
/api/data?${filters}。 - backend 查询 MySQL,返回匹配数据。
- 系统展示结果。
- 后置条件:数据列表更新,错误提示(如无数据)。
API 示例(Swagger)
paths:
/api/data:
get:
summary: 查询数据
parameters:
- name: name
in: query
type: string
description: 按名称筛选
- name: category
in: query
type: string
description: 按类别筛选
responses:
200:
description: 成功
schema:
type: object
properties:
status: { type: string, enum: ["success", "error"] }
data: { type: array }
message: { type: string }
示例依赖(backend package.json)
{
"dependencies": {
"express": "^4.18.2",
"mysql2": "^2.3.3",
"sequelize": "^6.29.0",
"cors": "^2.8.5",
"dotenv": "^16.0.3",
"swagger-jsdoc": "^6.2.8"
},
"engines": {
"node": "16.20.2"
}
}
通过以上优化,SRS 将更清晰、结构化,确保需求明确,开发团队可依据文档高效实施,Node.js 16.20.2 和 MySQL 环境完全兼容,支持跨子项目一致性和项目管理。