项目需求和设计
借助 ChatGPT 和 Copilot ,快速完成项目需求和技术方案设计
- 使用 ChatGPT 快速生成需求,并设计页面
- 选择 Vue3 技术栈,搭建开发环境
- 使用 ChatGPT 设计前端路由和 API
- 搭建 Mock 服务,通过 Copilot 生成 Mock 代码
ChatGPT 每次回答都会不一样,ChatGPT 输入框使用 shift + enter 换行
需求
要做一个仿简书项目
需求大纲
ChatGPT 提问:
你是互联网行业一名资深的产品经理,现在主导设计一个博客产品的需求,这个产品是面向编程技术人员的,例如简书、博客园、掘金这种网站。要求产品以博客功能为主,不要有其他无关功能。你来写这个产品的需求文档,先列出需求大纲。
ChatGPT 回复了详细的需求大纲,非常专业、全面
需求大纲:博客产品
-
用户注册和登录功能
- 用户可以注册新账号,并通过登录功能访问他们的个人博客空间。
- 注册和登录过程应简单明了,以提供良好的用户体验。
-
个人博客空间
- 用户可以创建个人博客,并在博客空间中展示自己的文章和信息。
- 博客空间应包括用户的基本资料、头像等个人信息展示功能。
-
文章发布和编辑
- 用户可以创建新的文章,并发布到他们的个人博客中。
- 编辑器应具备基本的文本编辑功能,例如格式化文本、插入图片等。
- 可以保存文章的草稿,并随时进行编辑和修改。
-
文章分类和标签
- 用户可以为自己的文章指定分类和标签,以便读者更好地浏览和搜索相关主题的文章。
- 分类和标签应该易于设置和管理。
-
文章评论和互动
- 允许读者对文章进行评论和回复,以促进用户之间的交流和互动。
- 评论功能应支持基本的格式化和表情符号。
-
文章搜索和过滤
- 提供搜索功能,使用户能够根据关键词搜索相关的文章。
- 支持按照分类、标签、发布时间等条件进行文章过滤和排序。
-
用户关注和订阅
- 允许用户关注其他编程技术人员的博客,并收到他们发布的新文章通知。
- 提供订阅功能,用户可以订阅特定分类或标签的文章。
-
用户个性化设置
- 允许用户自定义个人博客的外观和风格,例如选择主题、背景图片等。
- 提供个人设置选项,例如修改密码、管理订阅等。
-
数据安全和隐私保护
- 保护用户的个人信息和文章内容的安全性和隐私性。
- 采取必要的措施防止未经授权的访问和数据泄露。
以上是博客产品的需求大纲,包括了用户注册和登录、个人博客空间、文章发布和编辑、文章分类和标签、文章评论和互动、文章搜索和过滤、用户关注和订阅、用户个性化设置以及数据安全和隐私保护等主要功能。在后续的需求文档中,每个功能将会被进一步详细描述和规划
提取核心功能
整理核心功能:
- 博客展示
- 博客列表
- 分类导航(如前端、Java、Python、小程序 等)
- 搜索
- 博客详情页
- 展示博客内容
- 点赞
- 收藏
- 评论
- 用户管理
- 注册
- 登录
- 博客管理
- 我的博客列表(搜索、删除、编辑)
- 创建博客
- 编写博客内容(使用 markdown 语法)
- 设置分类(如前端、Java、Python、小程序 等)
- 发布博客
- 编辑博客
- 编辑博客内容(使用 markdown 语法)
- 重新设置分类(如前端、Java、Python、小程序 等)
- 重新发布博客
【注意】有些功能虽然不做,但实际开发中很重要
- 互动(私信、好友等)
- 推荐(热门推荐,根据个人标签推荐)
- 统计和分析
- 平台的管理(举报、置顶等)
详细需求
还可以继续通过 ChatGPT 细化需求,例如:
根据上文,请详细描述“用户管理” 部分的需求,按层级、条目列出
用户管理部分的需求可以按照以下层级和条目进行详细描述:
-
用户注册和登录
- 提供用户注册功能,包括输入用户名、密码和其他必要的注册信息
- 实现用户登录功能,验证用户名和密码的准确性,并提供错误处理机制
-
用户个人信息管理
- 允许用户编辑和更新个人信息,如昵称、头像、个人简介等
- 提供头像上传功能,支持常见的图片格式,并限制文件大小和尺寸
-
用户账号安全
- 实施必要的安全措施,如密码加密存储、密码强度要求和安全问题等
- 允许用户修改密码,要求验证当前密码的准确性
-
用户权限管理
- 区分不同用户角色,如普通用户和管理员,以实现相应的权限管理
- 管理员账号具备管理用户、评论和文章等功能的权限
-
用户搜索和过滤
- 提供用户搜索功能,允许其他用户通过用户名或其他标识查找用户
- 支持按照用户角色、注册时间等条件进行用户列表过滤和排序
-
用户关注和粉丝
- 允许用户关注其他用户,并查看自己的关注列表
- 显示用户的粉丝列表,即关注该用户的其他用户
-
用户通知和消息
- 向用户发送通知,如新回复、被关注等相关信息
- 提供消息功能,允许用户之间发送私信或站内信进行交流
-
用户注销和数据删除
- 提供用户注销账号的功能,允许用户永久删除账号和相关数据
- 在用户注销操作时,应提示用户确认并提供必要的警示信息
以上是用户管理部分的详细需求描述。在实际的产品开发中,每个条目的具体实现和细节可能会有所不同,根据实际情况进行调整和补充
设计页面
ChatGPT 提问:
以上功能比较全面,目前只实现如下核心功能: xxx xxx 这些核心功能,你分析需要多少个页面?每个页面都有哪些功能?按条目列出
根据 ChatGPT 的分析,我们可得到如下页面
- 首页
- 博客详情页
- 注册
- 登录
- 我的博客列表
- 创建/编辑博客
技术方案设计
使用 ChatGPT 根据需求,确定技术方案设计
技术选型
技术选型自己定,没必要交给 ChatGPT
- 使用 Vue3、Pinia、Vue-router、ElementPlus
创建 Vue3 开发环境,参考官网 https://cn.vuejs.org/guide/quick-start.html
pnpm create vue@latest并安装 ElementPlus https://element-plus.gitee.io/zh-CN/
去掉无用代码
- 对于
./assets/main.css,只保留第一行base.css,其他全部注释掉 - 整理 App.vue、AbountView.vue、HomeView.vue
为 ChatGPT 切换角色
基于之前的需求和页面,继续提问
你现在是一名资深前端工程师,精通 vue3 技术栈,接下里要根据上面的需求来开发这个项目。
以上需求你能理解吗?路由设计
提问:根据以上需求,需要拆分几个页面?以及如何配置 vue3 路由? 需要你写出:
- 每个页面的名称、介绍、文件目录;
- 路由配置代码;
根据以上需求,可以将页面拆分为以下几个部分:
1. 首页:
- 名称: 首页
- 介绍: 展示最新发布的博客文章,以及热门文章和推荐文章。
- 文件目录:
src/pages/Home.vue
2. 文章列表页:
- 名称: 文章列表页
- 介绍: 展示所有博客文章,支持按分类、标签、时间等条件进行筛选。
- 文件目录:
src/pages/Articles.vue
3. 文章详情页:
- 名称: 文章详情页
- 介绍: 展示单个博客文章的详细信息,包括文章内容、评论等。
- 文件目录:
src/pages/ArticleDetail.vue
4. 用户登录页:
- 名称: 用户登录页
- 介绍: 用户登录页面,支持用户名和密码登录。
- 文件目录:
src/pages/Login.vue
5. 用户注册页:
- 名称: 用户注册页
- 介绍: 用户注册页面,支持用户名、密码和邮箱注册。
- 文件目录:
src/pages/Register.vue
6. 用户个人中心页:
- 名称: 用户个人中心页
- 介绍: 展示用户的个人信息、博客文章、关注和粉丝等信息。
- 文件目录:
src/pages/Profile.vue
7. 关于我们页:
- 名称: 关于我们页
- 介绍: 展示关于我们页面的内容,包括团队介绍、联系方式等。
- 文件目录:
src/pages/About.vue
路由配置代码:
import { createRouter, createWebHistory } from 'vue-router'
const routes = [
{
path: '/',
name: 'Home',
component: Home,
},
{
path: '/articles',
name: 'Articles',
component: Articles,
},
{
path: '/articles/:id',
name: 'ArticleDetail',
component: ArticleDetail,
},
{
path: '/login',
name: 'Login',
component: Login,
},
{
path: '/register',
name: 'Register',
component: Register,
},
{
path: '/profile',
name: 'Profile',
component: Profile,
},
{
path: '/about',
name: 'About',
component: About,
},
]
const router = createRouter({
history: createWebHistory(),
routes,
})
export default router注意:
- 以上只是示例,您可以根据实际需求进行调整
- 路由配置代码需要放置在
src/router/index.js文件中 - 需要在
main.js文件中使用router实例
根据以上需求,可以将页面拆分为首页、文章列表页、文章详情页、用户登录页、用户注册页、用户个人中心页和关于我们页。路由配置代码可以参考以上示例进行修改。
API 设计
提问:根据你对以上需求的理解,这个项目需要服务端提供哪些 API 接口? 请写出:1. 接口地址;2.接口描述;3.请求数据格式的示例;4.返回数据格式的示例;
根据以上需求,这个项目需要服务端提供以下 API 接口:
1. 获取文章列表
接口地址: GET /api/articles
接口描述: 获取所有博客文章列表,支持按分类、标签、时间等条件进行筛选。
请求数据格式:
{
"category": "string", // 分类名称
"tag": "string", // 标签名称
"start_time": "string", // 开始时间
"end_time": "string", // 结束时间
"page": "number", // 页码
"page_size": "number", // 每页显示数量
}返回数据格式:
{
"data": [
{
"id": "string", // 文章 ID
"title": "string", // 文章标题
"author": "string", // 作者名称
"category": "string", // 分类名称
"tags": ["string", "string"], // 标签名称列表
"created_at": "string", // 创建时间
"updated_at": "string", // 更新时间
"content": "string", // 文章内容
},
// ...
],
"total": "number", // 总数
}2. 获取文章详情
接口地址: GET /api/articles/:id
接口描述: 获取单个博客文章的详细信息。
请求数据格式:
{
"id": "string", // 文章 ID
}返回数据格式:
{
"id": "string", // 文章 ID
"title": "string", // 文章标题
"author": "string", // 作者名称
"category": "string", // 分类名称
"tags": ["string", "string"], // 标签名称列表
"created_at": "string", // 创建时间
"updated_at": "string", // 更新时间
"content": "string", // 文章内容
}3. 创建文章
接口地址: POST /api/articles
接口描述: 创建一篇新的博客文章。
请求数据格式:
{
"title": "string", // 文章标题
"author": "string", // 作者名称
"category": "string", // 分类名称
"tags": ["string", "string"], // 标签名称列表
"content": "string", // 文章内容
}返回数据格式:
{
"id": "string", // 文章 ID
}4. 更新文章
接口地址: PUT /api/articles/:id
接口描述: 更新一篇已存在的博客文章。
请求数据格式:
{
"title": "string", // 文章标题
"author": "string", // 作者名称
"category": "string", // 分类名称
"tags": ["string", "string"], // 标签名称列表
"content": "string", // 文章内容
}返回数据格式:
{
"id": "string", // 文章 ID
}5. 删除文章
接口地址: DELETE /api/articles/:id
接口描述: 删除一篇博客文章
请求数据格式:
{
"id": "string", // 文章 ID
}返回数据格式:
{
"message": "string", // 成功消息
}6. 用户登录
接口地址: POST /api/users/login
接口描述: 用户登录。
请求数据格式:
{
"username": "string", // 用户名
"password": "string", // 密码
}返回数据格式:
{
"token": "string", // 用户登录令牌
}7. 用户注册
接口地址: POST /api/users/register
接口描述: 用户注册。
请求数据格式:
{
"username": "string", // 用户名
"password": "string", // 密码
"email": "string", // 邮箱地址
}返回数据格式:
{
"message": "string", // 成功消息
}8. 获取用户信息
接口地址: GET /api/users/me
接口描述: 获取当前登录用户的个人信息。
请求数据格式:
{
"token": "string", // 用户登录令牌
}返回数据格式:
{
"id": "string", // 用户 ID
"username": "string", // 用户名
"email": "string", // 邮箱地址
}9. 更新用户信息
接口地址: PUT /api/users/me
接口描述: 更新当前登录用户的个人信息。
请求数据格式:
{
"username": "string", // 用户名
"email": "string", // 邮箱地址
}返回数据格式:
{
"message": "string", // 成功消息
}10. 获取用户文章列表
接口地址: GET /api/users/:id/articles
接口描述: 获取指定用户的博客文章列表。
请求数据格式:
{
"id": "string", // 用户 ID
}返回数据格式:
{
"data": [
{
"id": "string", // 文章 ID
"title": "string", // 文章标题
"author": "string", // 作者名称
"category": "string", // 分类名称
"tags": ["string", "string"], // 标签名称列表
"created_at": "string", // 创建时间
"updated_at": "string", // 更新时间
"content": "string", // 文章内容
},
// ...
],
"total": "number", // 总数
}以上是这个项目需要的服务端 API 接口,您可以根据实际需求进行调整
检查这个 API 设计,它可能会遗漏一些,可以继续提问:
你还有一些需求没有考虑到,例如博客分类、搜索博客、删除博客、点赞、收藏、评论等。 请再详细分析上面的需求,重新给出一个 API 列表
PS:设计中尽量保证 API 完善,其他再有遗漏的,可以开发中继续补充
写 API 相关代码
先安装 axios npm i axios --save
以上接口设计,我想用 axios 进行封装,并封装 Axios 实例进行请求。要求拆分为 blog、comment、user 三个模块,应该创建哪些 js 文件? 先列出文件名称、目录和说明
ChatGPT 列出了四个文件:blogAPI commentAPI userAPI 和 axiosInstance
继续提问:根据你的设计,先写出 axiosInstance.js 的代码内容。请求时要带上 token
PS:重写 response 拦截器,可用 Copilot 生成代码
继续提问:再根据上面的 API 设计,写出 blogApi.js 的代码内容
(它可能考虑不那么全面,可继续追问:你没有考到了搜索、点赞、收藏。请重新写这份代码。)
根据以上方式,继续提问其他 API 的代码
搭建 mock 环境
直接提供一个 nodejs + mockjs 的环境,并先初始化 /api/blogs 路由
然后在 vue 前端项目中测试这个接口。PS:修改 axios 配置的 baseURL
为何使用 Mock 而不使用真实服务端
- Mock 简单,下载就能运行
- 真实服务端配置麻烦,且要安装、连接数据库
- 本课程目标是学习 AI 工具的前端使用,不要“喧宾夺主”