【Java项目-轻聊】03-AI赋能开发需求规格说明书
声明:本文档为开发需求规格说明书,内容由 AI 辅助生成、博主整理优化,仅作本项目开发参考使用。
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
🎯 你正在阅读「Java项目-轻聊」系列文章 🎯
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨🔥 弹简特 个人主页
❄️ 个人专栏直通车:
✨ 靠热爱去书写自己,靠勇敢去书写生活!
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
🌟 博主简介:
写在最前-项目同步码云
📦 项目源码 | 码云仓库
点击👉 点我看项目同步代码
轻聊 · 软件开发需求规格说明书(SRS)
| 属性 | 内容 |
|---|---|
| 文档编号 | SRS-LIGHTCHAT-v1.0 |
| 产品名称 | 轻聊 V1.0 |
| 文档版本 | V1.0 |
| 文档状态 | 已定稿 |
| 撰写角色 | 弹简特 |
| 目标读者 | 后端、前端 |
| 需求基线 | PRD-产品需求文档 V1.0(不得偏离 P0 需求) |
1. 文档目的与适用范围
1.1 目的
将 PRD 中的业务需求转化为可开发、可评审、可估时的技术需求,包括:
- 系统架构与分层约束
- 数据模型与业务规则实现
- 接口与协议实现要求
- 模块任务分解与完成定义
2. 需求追溯关系
PRD(业务需求 FR-*)
↓ 拆解
SRS(技术需求 DR-* + 实现约束)
↓ 实现
源代码 + 02-接口文档
↓ 验证
TRS(测试用例 TC-*)
| PRD 编号 | SRS 开发需求编号 | 主要交付 |
|---|---|---|
| FR-AUTH-001 | DR-AUTH-01 | 注册接口 + UserMapper.insert |
| FR-AUTH-002 | DR-AUTH-02 | 登录 + Session + 防重复登录 |
| FR-AUTH-003 | DR-AUTH-03 | logout + WS 关闭 |
| FR-AUTH-004 | DR-AUTH-04 | userInfo 网关逻辑 |
| FR-USER-001 | DR-USER-01 | 头像上传/访问 |
| FR-FRIEND-001 | DR-FRIEND-01 | friendList |
| FR-FRIEND-002 | DR-FRIEND-02 | search/user |
| FR-FRIEND-003 | DR-FRIEND-03 | POST /friend/request |
| FR-FRIEND-004 | DR-FRIEND-04 | handle + 事务 + 推送 |
| FR-SESSION-001 | DR-SESSION-01 | sessionList + 去重 |
| FR-SESSION-002 | DR-SESSION-02 | POST /session |
| FR-CHAT-001 | DR-CHAT-01 | WebSocket 转发 + 落库 |
| FR-CHAT-002 | DR-CHAT-02 | GET /message |
| FR-CHAT-003 | DR-CHAT-03 | client.js 未读 |
| FR-SYS-001 | DR-SYS-01 | Registry + OnlineManager |
3. 系统架构需求
3.1 总体架构(强制)
采用 B/S、三层架构 + WebSocket:

3.2 包结构规范(强制)
| 层级 | 包路径 | 职责 |
|---|---|---|
| 控制层 | controller |
接参、Session、调 Service、返回 |
| 入参 DTO | controller.param |
WS 消息体、通知对象 |
| 服务层 | service / service.impl |
业务逻辑、事务 |
| 内部 DTO | service.dto |
LoginResult、ServiceResult |
| 持久层实体 | dao.dataobject |
表映射实体 |
| 持久层接口 | dao.mapper |
MyBatis Mapper |
| 组件 | component |
跨模块基础设施 |
| 配置 | config |
Spring 配置类 |
禁止:Controller 直接调用 Mapper(除极特殊工具类)。
3.3 技术栈(强制)
| 技术 | 版本/说明 |
|---|---|
| Java | 1.8+ |
| Spring Boot | 2.7.6 |
| MyBatis Spring Boot | 2.3.0 |
| MySQL | 8.x |
| WebSocket | spring-boot-starter-websocket |
| 前端 | HTML + jQuery 2.x + 原生 WebSocket API |
| 构建 | Maven |
3.4 运行环境
| 项 | 要求 |
|---|---|
| 服务端口 | 8080 |
| 数据库 | web_chatroom,脚本 src/main/java/db.sql |
| 头像存储 | {user.dir}/upload/avatars |
| 配置 | application.yml |
4. 数据需求
4.1 逻辑模型
| 实体 | 表名 | 说明 |
|---|---|---|
| 用户 | user | 账号、密码、头像路径 |
| 好友关系 | friend | userId + friendId |
| 好友请求 | friend_request | 发起人、接收人、理由、status |
| 会话 | message_session | sessionId、lastTime |
| 会话成员 | message_session_user | sessionId + userId |
| 消息 | message | fromId、sessionId、content、postTime |
4.2 数据规则(必须实现)
| 规则 ID | 规则 | 关联 PRD |
|---|---|---|
| DATA-01 | 好友建立后双向各存一条 friend(或查询等价) | FR-FRIEND-004 |
| DATA-02 | 两人仅一个 canonical sessionId(取最小共有 sessionId) | FR-CHAT-001 |
| DATA-03 | 发好友请求前校验:非本人、非好友、无 pending | FR-FRIEND-003 |
| DATA-04 | 搜索排除自己、好友、pending 相关用户 | FR-FRIEND-002 |
| DATA-05 | 历史消息:倒序取 100 条再反序返回 | FR-CHAT-002 |
| DATA-06 | 头像路径存 /avatars/{uuid}.ext |
FR-USER-001 |
4.3 MyBatis 配置要求
mybatis:
mapper-locations: classpath:mapper/**/*Mapper.xml
type-aliases-package: com.zhongge.web_chatroom.dao.dataobject
启动类:@MapperScan("com.zhongge.web_chatroom.dao.mapper")
5. 接口与协议开发需求
项目接口文档详细见 【Java项目-轻聊】05-AI赋能设计接口文档。本章规定实现级要求。
5.1 HTTP 通用
| 项 | 要求 |
|---|---|
| 认证 | HttpSession,属性名 user,类型 User |
| 登录接口 | 成功返回 userId>0;密码字段恒 "" |
| 业务失败 | 好友等模块 { ok: false, message: "..." } |
| 上传 | multipart/form-data,字段 file、userId |
5.2 接口清单与开发任务
| 方法 | 路径 | DR 编号 | 实现类 |
|---|---|---|---|
| POST | /login | DR-AUTH-02 | UserController → UserServiceImpl |
| POST | /register | DR-AUTH-01 | 同上 |
| POST | /logout | DR-AUTH-03 | 同上 |
| GET | /userInfo | DR-AUTH-04 | 同上 |
| POST | /user/uploadAvatar | DR-USER-01 | 同上 + WebMvcConfig |
| GET | /user/getAvatar | DR-USER-01 | 同上 |
| GET | /search/user | DR-FRIEND-02 | 同上 |
| GET | /friendList | DR-FRIEND-01 | FriendController → FriendServiceImpl |
| GET | /friend/request/list | DR-FRIEND-04 | FriendRequestController |
| POST | /friend/request | DR-FRIEND-03 | 同上 |
| POST | /friend/handle | DR-FRIEND-04 | 同上,@Transactional |
| GET | /sessionList | DR-SESSION-01 | MessageSessionController |
| POST | /session | DR-SESSION-02 | 同上 |
| GET | /message | DR-CHAT-02 | MessageController |
5.3 WebSocket 协议(DR-CHAT-01)
| 项 | 要求 |
|---|---|
| 端点 | ws://{host}:8080/WebSocketMessage |
| 握手 | HttpSessionHandshakeInterceptor,user 写入 WS attributes |
| 客户端上行 | {"type":"message","sessionId":n,"content":"..."} |
| 服务端下行-聊天 | type=message,含 fromId/fromName/content/sessionId/sessionName/avatarPath |
| 服务端下行-好友 | type=FRIEND_REQUEST / FRIEND_ACCEPTED |
| 在线管理 | OnlineUserManager.putIfAbsent,重复连接关闭新连接 |
| 业务类 | ChatMessageServiceImpl.transferMessage |
6. 模块开发需求详述
6.1 认证模块(DR-AUTH)
| DR 编号 | 开发要求 | 完成定义(DoD) |
|---|---|---|
| DR-AUTH-01 | insert user;DuplicateKey → userId=0 | 新用户可注册;重复名失败 |
| DR-AUTH-02 | 校验密码;Registry+Online 防重登 | 双浏览器第二个登录失败 |
| DR-AUTH-03 | invalidate session;logout WS | 退出后可再登录 |
| DR-AUTH-04 | userInfo 无 session 返回空 user | 未登录打不开主界面 |
关键类:UserServiceImpl、UserSessionRegistry、OnlineUserManager、UserHttpSessionListener
6.2 头像模块(DR-USER)
| DR 编号 | 开发要求 | 完成定义(DoD) |
|---|---|---|
| DR-USER-01 | 校验格式/2MB;transferTo 至 upload/avatars;updateAvatarPath;资源映射 /avatars/** | 上传后可 URL 访问;getAvatar 有默认图 |
关键类:AvatarProperties、WebMvcConfig、UserServiceImpl
6.3 好友模块(DR-FRIEND)
| DR 编号 | 开发要求 | 完成定义(DoD) |
|---|---|---|
| DR-FRIEND-01 | selectFriendList 双向 | 与 db 测试数据一致 |
| DR-FRIEND-02 | searchByKeyword 排除规则 | 搜不到自己/好友 |
| DR-FRIEND-03 | insert request + push FRIEND_REQUEST | 在线对方收到推送 |
| DR-FRIEND-04 | accept:双向 friend + delete request + push;reject:delete | 同意后双方列表有对方 |
关键类:FriendRequestServiceImpl、WebSocketPushService
6.4 会话与消息模块(DR-SESSION / DR-CHAT)
| DR 编号 | 开发要求 | 完成定义(DoD) |
|---|---|---|
| DR-SESSION-01 | 组装 MessageSession 列表 + pickBetterSession 去重 | 同好友不出现两条 |
| DR-SESSION-02 | getSessionIdByUserPair 或新建 | 重复创建返回同一 id |
| DR-CHAT-01 | WS 转发 + messageMapper.add + canonical session | 双人实时互发;DB 有记录 |
| DR-CHAT-02 | 历史 100 条正序 | 刷新后仍在 |
| DR-CHAT-03 | client.js unreadCounts | 符合 PRD FR-CHAT-003 |
关键类:MessageSessionServiceImpl、ChatMessageServiceImpl、WebSocketController
6.5 系统模块(DR-SYS)
| DR 编号 | 开发要求 | 完成定义(DoD) |
|---|---|---|
| DR-SYS-01 | HTTP+WS 单点策略一致 | TRS 场景 S02 通过 |
7. 前端开发需求
7.1 页面与资源
| 文件 | 职责 |
|---|---|
| login.html / register.html | 认证页,jQuery ajax |
| client.html | 主界面 DOM |
| client.js | 全部业务交互(作者实现) |
| css/*.css | 样式(可 AI 辅助,需与 DOM 一致) |
7.2 client.js 功能模块
| 模块 | 函数区 | 对应 DR |
|---|---|---|
| 初始化 | getUserInfo、document.ready | DR-AUTH-04 |
| WebSocket | initWebSocket、handleMessage | DR-CHAT-01 |
| 发送 | initSendButton | DR-CHAT-01 |
| 好友 | getFriendList、clickFriend | DR-FRIEND-01、DR-SESSION-02 |
| 会话 | getSessionList、clickSession、getHistoryMessage | DR-SESSION-01、DR-CHAT-02 |
| 搜索 | searchUser、sendFriendRequest | DR-FRIEND-02、03 |
| 好友请求 | loadPending、handle、modal | DR-FRIEND-04 |
| 未读 | unreadCounts、incrementUnread、clearUnread | DR-CHAT-03 |
| 头像 | initAvatarUpload | DR-USER-01 |
| 退出 | initLogoutButton | DR-AUTH-03 |
7.3 前端约束
- WebSocket 地址须与部署主机一致(默认
127.0.0.1:8080)。 - 所有需登录接口依赖 Cookie 自动携带。
- 发送消息前校验已选会话且 sessionId 存在。
8. 非功能开发需求
| 编号 | 要求 |
|---|---|
| NFR-DEV-01 | 核心业务方法需有清晰日志(便于实训调试) |
| NFR-DEV-02 | 好友同意等写操作使用 @Transactional |
| NFR-DEV-03 | 代码分层符合第 3 章,Code Review 按 SRS 检查 |
| NFR-DEV-04 | 不提交 upload/avatars 下用户文件到 Git(.gitignore) |
OK,老铁们,了解完咱们的开发需求文档之后,下一期我们就开始实现我们的项目了,我们从设计数据库和设计接口文档开始~
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)